#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:
Как вы запускаете программу и как вы вводите входные данные? Мои предположения заключаются в следующем:
- Вы запускаете программу через терминал
- Программа фактически не завершится, пока вы не нажмете ctrl c, и вы ожидаете
- Ввод осуществляется путем ввода символов с клавиатуры
Если это верно, вам нужно будет ввести символ 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. О, я понимаю, я не мог понять, что это еще не конец файла, спасибо