Подсчет символов в C

#c

#c

Вопрос:

Я только начал с программирования и использую компилятор Codeblocks. С помощью этого кода

 long x = 0;

while(getchar() != EOF){
      x;
}

printf("%ldn", x);
  

Я пытаюсь подсчитать символы ввода, но каждый раз, когда я запускаю программу, она вообще ничего не печатает.

Однако эта версия

 long x = 0;

while(getchar() != EOF){
      x;

printf("%ldn", x);
}
  

выводит количество символов успешно, но, с другой стороны, он подсчитывает каждый отдельный символ (он показывает мне 1,2,3,4 вместо всего 4).

Спасибо за ваши ответы.

Комментарии:

1. При запуске программы отображается ли консоль в виде отдельного окна, которое затем закрывается при отправке EOF?

2. Как вы отправляете EOF ?

3. Заменить EOF на 'n' . Когда вы вводите некоторые символы и нажимаете enter, он должен напечатать правильное число.

4. EOF — это конец файла. Измените его на конец строки, то есть на ‘n’.

5. (игнорирование — я слепой ..)

Ответ №1:

Как вы запускаете программу и как вы вводите входные данные? Мои предположения заключаются в следующем:

  1. Вы запускаете программу через терминал
  2. Программа фактически не завершится, пока вы не нажмете ctrl c, и вы ожидаете
  3. Ввод осуществляется путем ввода символов с клавиатуры

Если это верно, вам нужно будет ввести символ EOF (ctrl z в Windows, ctrl d на Mac, вероятно, то же самое в других unix). Кроме того, вы можете передать программе файл, используя < file.ext синтаксис. Например: ./a.out < input.txt

Комментарии:

1. Стоит отметить, что в Windows вы должны ввести Ctrl-Z в начале строки, за которой следует нажатие Enter / Return или повторное нажатие Ctrl-Z (2-3 раза?) отбросить весь ввод в строке и вместо этого отправить EOF. В других системах, где это Ctrl-D, вам нужно только нажать его, чтобы завершить программу, если вы больше ничего не вводили; нажатие Enter / Return не требуется. В противном случае вы должны нажать Ctrl-D несколько раз (возможно, 2-3 раза), чтобы отправить EOF.

Ответ №2:

На самом деле вы используете EOF в цикле while, что означает «конец файла», в основном он используется, когда вы хотите прочитать текстовый файл. Теперь я объясню вам, что происходит в ваших обоих кодах, чем расскажу вам, как это решить.

Первый код:

 long x = 0;

while(getchar() != EOF){
     x;
}

printf("%ldn", x);
  

Здесь вы вводите данные с клавиатуры до тех пор, пока не произойдет EOF, и как только произойдет EOF, цикл прервется, и printf() будет выполнен, но в этом случае EOF не произойдет, и в результате ничего не будет напечатано.

Второй код:

 long x = 0;

while(getchar() != EOF){
     x;
printf("%ldn", x);
}
  

Цикл будет продолжаться до тех пор, пока не произойдет EOF, и будет продолжать печатать значение x, потому что printf() присутствует внутри цикла while, поэтому printf() будет выполняться столько раз, сколько повторяется цикл.

Решение: замените EOF на что-то другое, любой другой символ, например, пробел, подобный этому

 long x = 0;

while(getchar() != ' '){
      x;
}

printf("%ldn", x);
  

Комментарии:

1. О, я понимаю, я не мог понять, что это еще не конец файла, спасибо