Функция getchar () для подсчета символов в C - PullRequest
1 голос
/ 09 июня 2019

У меня есть код, который считает количество символов.Он использует getchar () и во время выполнения я использую (./a.out

Когда я использую условие,

while((c = getchar()) != EOF && c != '\n')

вместо

while((c = getchar()) != EOF)

в функции, где c - это int, определенный в main, счетчик верен.

int main() 
{
    long nc=0; int c;
    while((c = getchar()) != EOF)
    {
        putchar(c);
        ++nc;
    }
    printf("%ld", nc);
}

Я думаю, что проблема связана с символом '\ n'.Когда я использую putchar (c), как показано выше, допустим, что в моем файле test.txt 9 символов.Теперь он должен напечатать все символы в файле, а затем 9 в качестве вывода.Но вместо этого выводится 10.Кроме того, командная строка переходит на следующую строку после отображения символов, что является причиной печати 10, поскольку она считается символом '\ n'.Но откуда взялась эта буква '\ n'?

1 Ответ

1 голос
/ 09 июня 2019

Держу пари, что вы на самом деле не проверили размер вашего файла.Дважды проверьте размер с помощью

ls -ls test.txt

или

wc -c test.txt

Откройте файл в шестнадцатеричном редакторе.Я подозреваю, что в конце вы найдете символ новой строки (0x0A).

Но откуда взялся этот '\ n'?

Это зависит от того, как вы создали или отредактировали файл.

Если вы создали, например,

echo "Test file" > test.txt

, то bash автоматически добавит символ новой строки вконец.Некоторые текстовые редакторы могут делать то же самое.

...