Гость Опубликовано 15 июня, 2001 Жалоба Поделиться Опубликовано 15 июня, 2001 Народ - обьясните(сам не могу догаться) - что происходит, когда в проге ввожу вместо цифры букву a например: #include main() { int num; char name[10]; FILE *fPtr; if ((fPtr = fopen("my_test.data", "w")) == NULL) { printf("can't open it!"); } else { printf("Enter a number and a name.\n"); printf("> "); scanf("%d%s", &num, name); while (!feof(stdin)) { fprintf(fPtr, "%d %s\n", num, name); printf("> "); scanf("%d%s", &num, name); } fclose(fPtr); } return 0; и нажимаю энтер - а происходит след - в файл бесконечно начинает выводиться какая-то фигня(на месте mun - цифры, на месте name буквы из всей кодировочной таблицы) - чую что данные начинают считыватся(следуя спецификатору s но не находят признака конца стороки - так? Ну и как конкретно все работает непонятно... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 18 июня, 2001 Жалоба Поделиться Опубликовано 18 июня, 2001 во первых, попробуйте написать не просто "w" а "wt". во вторых почему fclose внутри цикла, а fopen вне цикла? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 18 июня, 2001 Жалоба Поделиться Опубликовано 18 июня, 2001 Нет-нет fopen и fclose обе вне цикла... забыл вписать последнюю скобку после return 0; Вот упрощенный вариант - #include main() { int num; FILE *fPtr; if ((fPtr = fopen("my_test.data", "w")) == NULL) { printf("can't open it!"); } else { printf("Enter a number and a name.\n"); do { printf("> "); scanf("%d", &num); if (feof(stdin)) { break ;}; fprintf(fPtr, "%d\n", num);} while (!feof(stdin)); fclose(fPtr); } return 0; } Но та же история - если ввожу при запрсе не цифру(а букву) - то опять бесконецный ввод в файл какой-то ерунды - причем прога не реагирует на контрол-С. Интересно что происходит в этом случае? - ну и как пишутся реальные программы - т.е. должна быть защита от некорректного ввода... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.