не могу найти ошибку в своём коде
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
не могу найти ошибку в своём коде - 2008-11-18 15:52:32.900000
|
|
|
keeper321
Сообщений: 13
Оценки: 0
Присоединился: 2008-11-13 12:27:14.990000
|
Здрасти всем! Задание такое: Упражнение 1-10 —————– Напишите программу, которая будет печатать слова из фай- ла ввода, причем по одному на строку. …поможите разобраться хто могёт плиз…. не выводит слова на экран… #define eof 0 #define yes 1 #define no 0 main() { int inword; char c; inword=no; c=getchar(); while(c!=eof); { if(c!=' ' || c!='\n' || c!='\t') { printf ("%s",c); inword=yes; } else if(inword==yes) { printf ("\n"); inword=no; } c=getchar(); } }
|
|
|
RE: не могу найти ошибку в своём коде - 2008-11-18 16:45:21.046666
|
|
|
tt_andrey
Сообщений: 213
Оценки: 0
Присоединился: 2007-07-03 13:54:36.440000
|
Проблема в том, что код уродливый. Вот алгоритм короче, делает то, что ты хочешь.
int c=getchar();
while(!feof(stdin))
{
if(c==' ' || c=='\n' || c=='\t')
printf("\n");
else
printf("%c", (char)c);
c=getchar();
}
|
|
|
RE: не могу найти ошибку в своём коде - 2008-11-18 16:49:05.860000
|
|
|
tt_andrey
Сообщений: 213
Оценки: 0
Присоединился: 2007-07-03 13:54:36.440000
|
а еще у тебя спецификатор неправильно указан в printf ("%s",c); надо %c, а %s для строк
|
|
|
RE: не могу найти ошибку в своём коде - 2008-11-18 16:51:19.733333
|
|
|
keeper321
Сообщений: 13
Оценки: 0
Присоединился: 2008-11-13 12:27:14.990000
|
спасибо за помошь…. знаю, что код параличный ))) только начал заниматься по книге…. а можно если не трудно в каком месте моего кода я в принципе неправ….если это возможно конечно… заранее спасибо
|
|
|
RE: не могу найти ошибку в своём коде - 2008-11-18 16:53:42.830000
|
|
|
Archivarius
Сообщений: 164
Оценки: 0
Присоединился: 2008-10-26 00:16:25.630000
|
Вот, лови, за пять минут накалякал. Усебя на винте файлег C:\\1.txt сделай с текстом, который выводить. #include <stdio.h>
int main()
{
FILE *fl;
size_t a;
char buf[2]=" ";
fl=fopen("C:\\1.txt","rb");
while((a=fread(buf,1,1,fl))>0)
printf("%c",(buf[0]==' ')?"\n":buf);
fclose(fl);
return 0;
}
|
|
|
RE: не могу найти ошибку в своём коде - 2008-11-18 16:59:01.706666
|
|
|
googy
Сообщений: 5
Оценки: 0
Присоединился: 2008-07-30 18:10:37.426666
|
тут много что не правильно.. while (!f.eof()) { } вот тебе пример: ifstream file("file.txt"); std::string buf; getline(file, buf); cout << buf << endl; file.close();
|
|
|
RE: не могу найти ошибку в своём коде - 2008-11-18 23:39:27.546666
|
|
|
tеstеr
Сообщений: 377
Оценки: -46
Присоединился: 2008-02-08 17:56:40.563333
|
Вариант посложнее Несколько разделителей обрабатываюся как 1, начальные и конечные разделители не будут вызывать переводы строк. (основано на варианте от tt_andrey) // C, Ansi-style
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char c;
int factor=1;
c=getchar();
while(!feof(stdin))
{
if(c==' ' || c=='\n' || c=='\t')
factor=0;
else
{
if(factor==0)
{
factor=1;
puts("");
}
putchar(c);
}
c=getchar();
}
return EXIT_SUCCESS;
}
А нет, начальные разделиели всё же вызовут 1 перевод строки.
|
|
|
RE: не могу найти ошибку в своём коде - 2008-11-19 08:22:32.586666
|
|
|
keeper321
Сообщений: 13
Оценки: 0
Присоединился: 2008-11-13 12:27:14.990000
|
так понимаю что во всех вариантах если будет 100 пробелов подряд или 100Тtab будет 100 новых строк? хочу сделать чтоб с кажддой новой строки начиналось только слово, чтоб не было пустых новых строк… что я и пытался сделать…с помощью int inword
|
|
|
RE: не могу найти ошибку в своём коде - 2008-11-19 22:46:19.930000
|
|
|
Archivarius
Сообщений: 164
Оценки: 0
Присоединился: 2008-10-26 00:16:25.630000
|
Немного твою программу переделал: #include <fstream>
int main()
{
char c;
bool inword;
std::ifstream is("C:\\1.txt");
while(!is.eof())
{
c=is.get();
if (c!=' ' && c!='\n' && c!='\t')
{
printf ("%c",c);
inword=true;
}
else
{
if (inword) printf ("\n");
inword=false;
}
}
return 0;
}
|
|
|
|
|