Программа сканирует только одну строку ввода вместо всех

#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.