getchar () в C с циклом во время не печатая потом - PullRequest
0 голосов
/ 16 марта 2020

Я не понимаю, почему вызов printf() после while l oop не выполняется?

int main(){
    while((getchar()) != EOF){
        characters ++;
        if (getchar() == '\n'){
            lines++;
        }
    }
    printf("lines:%8d\n",lines);
    printf("Chars:%8d",characters);

    return 0;
}

Ответы [ 3 ]

1 голос
/ 16 марта 2020

Я думаю, вы пытаетесь это сделать

#include<stdio.h>


int main()
{
    int characters=0,lines=0;
    char ch;

    while((ch=getchar())!= EOF)
    {

        if (ch == '\n')
            lines++;
        else
        {
            characters++;
            while((ch=getchar())!='\n'&&ch!=EOF);   //is to remove \n after a character
        }
    }

    printf("lines:%8d\n",lines);
    printf("Chars:%8d",characters);

    return 0;
}

Вывод:

a
s
d
f

^Z
lines:       1
Chars:       4
Process returned 0 (0x0)   execution time : 8.654 s
Press any key to continue.   

Примечание: ^ Z (ctrl + z) для отправки EOF на стандартный ввод (в * 1008) *)

1 голос
/ 16 марта 2020

Вы должны быть осторожны с лечением в while l oop. Действительно, вы пропускаете каждый символ, прочитанный в вашем заявлении while. Вы должны сохранить эти данные, чтобы потом их использовать. Правильный синтаксис будет while(( c = getchar()) != EOF)

0 голосов
/ 16 марта 2020

Вы, вероятно, ищете что-то вроде этого:

#include <stdio.h>

int main()
{
  int characters = 0;
  int lines = 0;
  int c;
  while ((c = getchar()) != EOF) {
    characters++;
    if (c == '\n') {
      lines++;
      characters--;  // ignore \n
    }
  }
  printf("lines: %8d\n", lines);
  printf("Chars: %8d", characters);

  return 0;
}

while ((c = getchar()) != EOF) может показаться немного запутанным.

Обычно он вызывает getchar, помещает возвращаемое значение в c и затем проверяет, равно ли c EOF.

...