#c
Вопрос:
У меня есть задание, в котором мне нужно написать программу, которая считывает текстовый файл input.txt строка за строкой. Редактирует эти строки и записывает их в текстовый файл output.txt следующим образом:
-в нечетных строках переопределяются числа-в строках с начальным числом буквы (a-z, A-Z) заменяются дефисом.
Все в порядке, кроме того, что сама программа читает только первую строку из input.txt и помещает только эту одну строку, измененную на output.txt Что я сделал не так ?
int cv6_treti() { char riadok[1000]; int x=1, y; FILE *fr = fopen ("vstup.txt","r"); FILE *fw = fopen ("vystup.txt","w"); fscanf (fr, "%s",riadok); while (y lt; 1000){ if (x%2==1){ if (riadok[y] gt;= '0' amp;amp; riadok[y] lt;= '9'){ riadok[y] = '*'; } } else if (x%2==0) { if (riadok [y]gt;= 'a' amp;amp; riadok[y] lt;= 'z'){ riadok[y] = '-'; } if (riadok [y]gt;= 'A' amp;amp; riadok[y] lt;= 'Z'){ riadok[y] = '-'; } } y ; } fprintf (fw, "%s",riadok); fclose(fw); fclose(fr); return 0; }
Комментарии:
1. Вы читаете только одну строку из файла. Если вы хотите прочитать более одного, вы должны либо написать больше
fscanf
s, либо вставить один в цикл.2. Доктор Гонзо, как вы думаете, какова ценность
y
первого разаwhile (y lt; 1000){
?3. Значение
x
не меняется.4. @DoctorGonzo Да, приятно сообщить, почему вы этого хотите, но с какой ценности вы хотели
y
начатьwhile (y lt; 1000){
? Вы хотели, чтобы это начиналось с 0, 1, 42 или …? Сint x=1, y;
,y
еще ни с чем не инициализирован/не назначен.5. @DoctorGonzo 1) Вместо того, чтобы «просто добавить 0 к нему» (добавив 0 к неопределенному
y
сy = y 0;
), инициализируйте его до 0, как это сделал код дляx
.int y = 0;
. 2) «потому что он по-прежнему сканирует только первую строку» —gt; конечно. Код считывает только одно слово ввода сfscanf (fr, "%s",riadok);
помощью . Если вы хотите прочитать несколько строк, звонитеfgets()
несколько раз. Существуют и другие проблемы. Удачи-GTG.