Я написал небольшой код, который должен читать строку ввода консоли и выдавать общий номер строки. Иногда он дает правильный вывод, а иногда - неправильный. Обычно неправильно, если 1 строка содержит только 1 символ, например:
а
б
с
д
Есть какая-то ошибка, но я не могу понять, что это такое. Я пробовал различные комбинации кода, отлаживал и просил кого-то еще (не это сообщество) посмотреть и помочь мне. Но все потерпели неудачу до сих пор. Если кто-то может указать, где я не прав и что сработает, буду очень благодарен.
Вот код:
#include<stdio.h>
int next_line(){
int cnt=0;
int ch;
ch=getchar();
while (ch!=EOF)
{
ch=getchar();
cnt ++;
if (ch ='\n')
{
break;
}
}
if ((cnt > 0)||(ch ='\n'))
{
return 1;
}
else
{
return 0;
}
}
int read(){
int lines=0;
while (!feof(stdin))
{
next_line();
lines += next_line();
}
return lines;
}
int main(){
int n=0;
n=read();
printf("\n%d",n);
return 0;
}
заранее спасибо
Вы вызываете next_line()
дважды в read()
, но увеличиваете lines
только от одного из них. Итак, вы считаете каждую вторую строку.
Вы дважды вызываете свою функцию «next_line» в функции «чтения», поэтому вы считаете только каждую вторую строку. Как указывали другие, feof() ненадежен в этом случае использования. Рассмотрим следующую версию вашего кода:
#include <stdio.h>
int
next_line(void)
{
int charcount = 0;
char c;
while ((c = getchar()) &&
c != EOF) {
if (c == '\n') {
return 1;
}
continue;
}
return 0;
}
/* renamed from the generic 'read' to avoid naming
conflicts */
int
count_lines(void)
{
int line_count = 0;
while (next_line()) {
line_count++;
}
return line_count;
}
int
main()
{
int line_count = 0;
line_count = count_lines();
printf("counted %d lines\n", line_count);
return 0;
}
Пробовали использовать отладчик?