little_greg Posted May 22, 2009 Report Share Posted May 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; } Link to comment Share on other sites More sharing options...
Тролль Posted May 22, 2009 Report Share Posted May 22, 2009 little_greg: Ты все время спотыкаешься на одной и той же строке: if((fp=fopen("MYFILE","r"))=NULL) Вместо сравнения с NULL тут записано присваивание. Паскаль бы сразу нашел ошибку, но C++ доверяет программисту почти безоговорочно и постарается истолковать и выполнить даже явные опечатки. Оффтоп Программирование гораздо ближе к труду писателя, чем к математике. Это перевод с русского языка на язык программирования, и горе пишущему с ошибками :). Link to comment Share on other sites More sharing options...
little_greg Posted May 22, 2009 Author Report Share Posted May 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; } Link to comment Share on other sites More sharing options...
Тролль Posted May 22, 2009 Report Share Posted May 22, 2009 (edited) С чего ты взял, что записывается только название диска, если потом можно считать из этого файла и всё остальное? Тут всё должно нормально записываться в файл, ты можешь его открыть обычным редактором как текстовый и убедиться в этом (только имей в виду, что в незаполненных введенной информацией частях строк будет всякий мусор). И я не понимаю, на что ты жалуешься, если "когда считываю из этого файла структуру, считываются все введенные данные". Edited May 22, 2009 by Тролль Link to comment Share on other sites More sharing options...
little_greg Posted May 22, 2009 Author Report Share Posted May 22, 2009 Я просто открывал файл в DEV C++, там записывалась только 1 строка, щас попробовал в блокноте открыть все нормально. СПС. Link to comment Share on other sites More sharing options...
Recommended Posts