Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2009, 17:44   #1
Proxy
 
Регистрация: 02.05.2009
Сообщений: 9
По умолчанию строки и немного про матрицы(C++)

Собственно в программе про матрицы такие строчки:
Код:
while(iF.peek()!=EOF)
{
 iF.ignore(100,'\n');
 x++;
}
это мне нужно для того,чтоб посчитать кол-во строк в матрице.
Объяснице пожалуйста ,что делают ф-ии peek(просматривает значения ,не перемещая указатель?) и ignore(если меньше 100 символов выполнить переход к след строке?),а то я толком понять не могу =( и как сделать, чтоб он пустые строки не считал?

Программа про строки:надо найти кол-во восклицательных знаков,вопросов и точек в тексте.
Код:
#include "iostream.h"
#include "stdio.h"
#include "conio.h"
#include "process.h"
#include "stdlib.h"
#define N 255
void kolvo(char ch,char ss[N]);
void file(char ss[N]);
int el(char ss[N]);
void main()
{
clrscr();
char ch,ff[N];
int j;
printf("Vvedite nazvanie file\n"); 
scanf("%s",ff); //cin>>ff;
file(ff);
j=el(ff);
printf("kol-vo cimvolov : %d\n",j);
printf("vvedite simvol,kol-vo kotorogo hotite nayti\n"); 
printf("'!'\n'?'\n'.'\ndrugoy simvol-exit\n"); //cout<<"'!'"<<endl<<"'?'"<<endl<<"'.'"<<endl<<"drugoy simvol-exit"<<endl;
printf("~~~~~~~~~~~~~~~~~~\n"); //cout<<"~~~~~~~~~~~~~~~~~~"<<endl;
while(ch)
{
//scanf("%c",ch); //-не читает символ,выполняет сразу выход
 cin>>ch;
if(ch!='!'&&ch!='?'&&ch!='.')
{
printf("exit!");
getch();
exit(1);
}
i f(ch=='!'||ch=='?'||ch=='.')
printf("kol-vo '%c' : ",ch); 
kolvo(ch,ff);
}
clrscr();
getch();
}

 void kolvo(char ch,char ss[N]) //-считаю кол-во определенных символов 
{
char *ps,s[N];
int k;
FILE *f=fopen(ss,"r");
 while (!feof(f))
{
k=0;
ps=fgets(s,N,f);
while (*ps)
{
if (*ps==ch)
k++;
ps++;
}
}
fclose(f);
printf("%d\n",k);
}

void file(char ss[N]) //-проверяю наличие файла
{
FILE *f=fopen(ss,"r");
if(!f)
{
clrscr();
printf("file ne nayden!");
getch();
exit(1);
}
}

int el(char ss[N]) //-подсчет символов
{
char *pp,s[N];
int i=0;
FILE *f=fopen(ss,"r");
while (!feof(f))
{
pp=fgets(s,N,f);
while (*pp)
{
i++;
pp++;
}
}
return i;
}
Проблема заключается в том,что scanf("%c",ch); -не читает символ,выполняет сразу выход,а с cin>>ch всё работает нормально,но надо через scanf. И как мне выделить память через malloc? ф-ию подсчета элементов я сделал. Программа правильно работает только с одной строкой,как сделать,чтоб работала,если строк много?
Заранее спасибо,и прошу прощения за неудобное оформление(=

Последний раз редактировалось Proxy; 27.10.2009 в 18:25.
Proxy вне форума Ответить с цитированием
Старый 28.10.2009, 15:08   #2
Proxy
 
Регистрация: 02.05.2009
Сообщений: 9
По умолчанию

хелп,на завтра надо((
Proxy вне форума Ответить с цитированием
Старый 28.10.2009, 18:11   #3
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Код:
scanf("%c",&ch);
counter вне форума Ответить с цитированием
Старый 28.10.2009, 18:34   #4
Proxy
 
Регистрация: 02.05.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
Код:
scanf("%c",&ch);
scanf("%c",&ch) - только что попробовал,то же самое((
если так -scanf("%1s",&ch) ,то работает
Proxy вне форума Ответить с цитированием
Старый 28.10.2009, 20:10   #5
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

поставь fflush(stdin); перед вводом
counter вне форума Ответить с цитированием
Старый 28.10.2009, 21:54   #6
Proxy
 
Регистрация: 02.05.2009
Сообщений: 9
По умолчанию

спасибо,заработало с "%c"
Proxy вне форума Ответить с цитированием
Старый 04.11.2009, 18:18   #7
Proxy
 
Регистрация: 02.05.2009
Сообщений: 9
По умолчанию

pls,помогите с выделением памяти(( количество строк и символов в каждой строке нашел
переменная s объявленна как char *s;
Код:
void kolvo(char ch,char *ss)
{
char *ps;
int k,i=0,m=0,cc=0,buk=0,*bs;
f=fopen(ss,"r");
while (!feof(f))
{
k=0;ps=0;
ps=fgets(s,N,f);
while (*ps)
{
if (*ps==ch)
k++;
if(*ps!='\n'&& *ps!='\0')
buk++;
ps++;
}
bs[i]=buk; //кол-во символов в каждой строке
i++;
buk=0;
m=m+k;
}
cc=i; //кол-во строк
fclose(f);
 printf("%d\n",m);
// printf("%d\n",cc);
for(i=0;i<cc;i++)
 printf("%d\n",bs[i]);
for (i=0;i<cc;i++)
s[i]=(char*)malloc(bs[i]); //вот пытаюсь выделить память
//s=(char*)malloc(bs[i]); //-так не ругается,но правильно ли это?
if(s!=NULL)
printf("videleno");
}

Последний раз редактировалось Proxy; 04.11.2009 в 18:22.
Proxy вне форума Ответить с цитированием
Старый 04.11.2009, 18:36   #8
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

память под массив bs забыли выделить

Код:
int *bs=(int*)malloc(cc*sizeof(int));
Цитата:
s=(char*)malloc(bs[i]); //-так не ругается,но правильно ли это?
если выделяете память для строки размером bs[i] байт, то правильно
counter вне форума Ответить с цитированием
Старый 04.11.2009, 18:56   #9
Proxy
 
Регистрация: 02.05.2009
Сообщений: 9
По умолчанию

освобождать так?
for (i=0;i<cc;i++)
free(s);
только s у нас непроиндексировано :/ или без цикла просто free(s) писать?
Proxy вне форума Ответить с цитированием
Старый 04.11.2009, 19:13   #10
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

просто free(s)
counter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
про матрицы Smotritel89 Общие вопросы C/C++ 2 16.10.2008 15:13
Задача про седловую точку матрицы (С++) Fuckin_Princess Помощь студентам 3 28.11.2007 16:39