little_greg Опубликовано 22 мая, 2009 Жалоба Поделиться Опубликовано 22 мая, 2009 При работе программы открывается окно командной строки и возникает ошибка Windows, в которой предлагается отправить отчет. Помогите разобраться, что не так! #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { FILE *fp; char name[12]; if((fp=fopen("MYFILE","r"))=NULL) { puts("Ne otrkyt fail"); system("PAUSE"); exit(0); } while(fgets(name,12,fp)!=NULL) { printf(name); } fclose(fp); system("PAUSE"); return EXIT_SUCCESS; } Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 22 мая, 2009 Жалоба Поделиться Опубликовано 22 мая, 2009 little_greg: Ты все время спотыкаешься на одной и той же строке: if((fp=fopen("MYFILE","r"))=NULL) Вместо сравнения с NULL тут записано присваивание. Паскаль бы сразу нашел ошибку, но C++ доверяет программисту почти безоговорочно и постарается истолковать и выполнить даже явные опечатки. Оффтоп Программирование гораздо ближе к труду писателя, чем к математике. Это перевод с русского языка на язык программирования, и горе пишущему с ошибками :). Ссылка на комментарий Поделиться на другие сайты Поделиться
little_greg Опубликовано 22 мая, 2009 Автор Жалоба Поделиться Опубликовано 22 мая, 2009 "Ты все время спотыкаешься на одной и той же строке: if((fp=fopen("MYFILE","r"))=NULL) Вместо сравнения с NULL тут записано присваивание. Паскаль бы сразу нашел ошибку, но C++ доверяет программисту почти безоговорочно и постарается истолковать и выполнить даже явные опечатки." - это просто капец!!! Когда я записываю структуру в файл, у меня в файл записывается только одно значение, к примеру, в этой программе записывается в файл только то, что записывается в качестве названия диска (disc.name). Разве так должно быть? Но когда считываю из этого файла структуру, считываются все введенные данные. #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { FILE *fp; struct CD { char name[20]; char description[40]; char category[12]; float cost; int number; } disc; char filename[25]; printf("Vvedite imya faila, kotoryi zhelaete sozdat: "); gets(filename); if((fp=fopen(filename,"w"))==NULL) { printf("Ne otkryt fail %s\n",filename); system("PAUSE"); exit(0); } printf("Vvedite svedeniya o diske\n"); printf("Vvedite nazvanie diska: "); gets(disc.name); while(strlen(disc.name)>0) { printf("Vvedite opisanie diska: "); gets(disc.description); printf("Vvedite categoriyu: "); gets(disc.category); printf("Vvedite cenu: "); scanf("%f",&disc.cost); printf("Vvedite nomer yacheiki: "); scanf("%d",&disc.number); fwrite(&disc,sizeof(disc),1,fp); getchar(); putchar('\n'); printf("Vvedite nazvanie: "); gets(disc.name); } fclose(fp); system("PAUSE"); return EXIT_SUCCESS; } Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 22 мая, 2009 Жалоба Поделиться Опубликовано 22 мая, 2009 (изменено) С чего ты взял, что записывается только название диска, если потом можно считать из этого файла и всё остальное? Тут всё должно нормально записываться в файл, ты можешь его открыть обычным редактором как текстовый и убедиться в этом (только имей в виду, что в незаполненных введенной информацией частях строк будет всякий мусор). И я не понимаю, на что ты жалуешься, если "когда считываю из этого файла структуру, считываются все введенные данные". Изменено 22 мая, 2009 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
little_greg Опубликовано 22 мая, 2009 Автор Жалоба Поделиться Опубликовано 22 мая, 2009 Я просто открывал файл в DEV C++, там записывалась только 1 строка, щас попробовал в блокноте открыть все нормально. СПС. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения