2015-06-05 3 views
3

Я написал простую программу гр подсчитать количество символовподсчета символов на входе с в то время как петля

#include <stdio.h> 
main() 
{ 
    long nc; 
    nc = 0; 

    while (getchar() != EOF) 
     ++nc; 

    printf("%ld\n", nc); 
} 

Эта программа не печатает мне символы. При тестировании различных случаев я обнаружил, что застрял в бесконечном цикле while().

+1

Попробуйте использовать: 'while (getchar()! = '\ N')'. Помните, что 'getchar()' не заканчивается, пока вы не отправите ввод ('\ n'). –

ответ

2
while (getchar() != '\n') 
    ++nc; 
printf("%ld \n",nc); 

работал!

7

Эта программа не печатает мне символы

Это не будет. Вы не добавили никаких заявлений на номер print.

Я обнаружил, что я застрял в бесконечном в то время как петле

Если вы не ударилинарушения состояния, вы будете в курсе. Чтобы выйти из цикла, вы должны получить EOF. использовать

  • CTRL + Z (на окнах)
  • CTRL + D (на Linux)

Теперь решения:

  1. getchar() не будет печатать значения. Вы должны сохранить значения и напечатать явно (если хотите), возможно, putchar().

  2. Вы либо поставить EOF или изменить разрушающее состояние while(), чтобы выйти из существенного бесконечного цикла в противном случае.


Помимо вопросов кодирования, вы должны думать о логике, тоже. В настоящей форме код, getchar(), считается новой линией (\n) в качестве действительным номером. Чтобы объяснить, ввод в виде

$ ./a.из     ENTER
            ENTER
с             ENTER
д             ENTER
е               ENTER
г             ENTER
CTRL +D

даст результат

но это не то, что мы обычно называем подсчетом характер. Вы можете также рассмотреть эту часть логики.

Таким образом, рекомендуемая подпись main() - int main(void).

5

Попробуйте следующее

#include <stdio.h> 

int main(void) 
{ 
    int c; 
    long nc = 0; 

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

    printf("%ld\n", nc); 
} 

Вы должны генерировать состояние EOF (Ctrl + D в UNIX-системах или CTRL + Z в Windows) или просто нажмите Enter.

+1

@Sourav Ghosh Спасибо. Я сделал эту ошибку как результат копирования и вставки. :) –

+0

Нет проблем с нами, происходит со всеми нами. Только что отметил, поэтому подумал о том, чтобы записать заметку. Cheers :-) –

+0

Я пробовал, но это не сработало .. :( – bilcy

2

Попробуйте так:

#include <stdio.h> 

int main(void) 
{ 
    int c; 
    long nc = 0; 

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

    printf("%ld\n", nc); 
} 
+0

эта строка: 'while ((c = getchar())! = EOF || c! = '\ n') 'остается в цикле, навсегда, поскольку «c» не может быть как EOF, так и «\ n» Предложить: while ((c = getchar())! = EOF && c! = '\ N') ' – user3629249

Смежные вопросы