Что вы положили в, чтобы закончить программу, -1, не работает:ENDOFFILE в С - EOF
#include <stdio.h>
//copy input to output
main() {
char c;
c = getchar();
while(c != EOF) {
putchar(c);
c = getchar();
}
}
Что вы положили в, чтобы закончить программу, -1, не работает:ENDOFFILE в С - EOF
#include <stdio.h>
//copy input to output
main() {
char c;
c = getchar();
while(c != EOF) {
putchar(c);
c = getchar();
}
}
Я согласен со всеми другими людьми в этой теме, говоря, использование Int C не полукокса.
Чтобы закончить цикл (по крайней мере, на * nix-подобных системах), вы должны нажать Ctrl-D для отправки EOF.
Кроме того, если вы хотите, чтобы ваши персонажи вторят мгновенно переписать код так:
#include<stdio.h>
int
main(void)
{
int c;
c = getchar();
while (c != EOF)
{
putchar(c);
c = getchar();
fflush(stdout); /* optional, instant feedback */
}
return 0;
}
Итак, вы не можете отправить последовательность символов для представления EOF? –
@ Chris_45: нет, EOF в этом смысле «вне диапазона», т. Е. Не действительный символ. – unwind
Как вы лучше всего описываете, что это такое, это «вне диапазона»?/С уважением –
вы должны использовать int
и не char
Macro: Int EOF
Этот макрос является целое значение, что я s, возвращаемый несколькими функциями для указания условия конца файла или некоторой другой ситуации с ошибкой. В библиотеке GNU EOF составляет -1. В других библиотеках его значение может быть другим отрицательным числом.
На платформе Win32 это также -1 (в stdio.h): #define EOF (-1) –
@Manu: То, что было phoenix, сказал, что это макрос, который оценивает int. Тип литерала -1 - int. – unwind
Преобразование int -1 в char, я думаю, это тоже -1. –
Документация для getchar
заключается в том, что она возвращает следующий символ, который передается в unsigned char
, а затем возвращается в возвращаемом значении int
.
Причина этого заключается в том, чтобы убедиться, что все допустимые символы возвращены как положительные значения и никогда не будут сравниваться как EOF
, макрос, который вычисляет отрицательное целочисленное значение.
Если поместить возвращаемое значение getchar
в char
, то в зависимости от того, знаком или без знака ваша реализация языка char
вы можете получить ложное обнаружение EOF
, или вы никогда не обнаружить EOF
даже тогда, когда вы должны.
Сигнализация EOF
в библиотеке C обычно происходит автоматически при перенаправлении ввода программы из файла или процесса с каналами. Сделать это в интерактивном режиме зависит от вашего терминала и оболочки, но, как правило, в unix достигается с помощью Ctrl-D и в окнах Ctrl-Z на одной строке.
Если целочисленное значение, возвращаемое getchar(), хранится в переменной типа char, а затем сравнивается с константой целого EOF, сравнение никогда не будет успешным, поскольку расширение знака переменной типа char при расширении to integer определяется реализацией. - opengroup POSIX standard
Если символ является unsigned
по умолчанию для компилятора (или каким бы то ни опции используются для вызова компилятора), вполне вероятно, что
(c == EOF)
никогда не может быть правдой.Если sizeof(unsigned char) < sizeof(int)
, что почти всегда верно, то продвижение char
к int никогда не приведет к отрицательному значению, а EOF
должно быть отрицательным значением.
Это одна из причин, по которой все (или, по крайней мере, многие, если не все) функции в стандарте C, которые имеют дело с возвращаемыми или возвращаемыми символами, указывают в качестве параметра или типа возврата int
.
EOF
- это не фактический символ или последовательность символов. EOF
обозначает конец входного файла или потока, то есть ситуацию, когда getchar()
пытается прочитать символ за пределами последнего.
На Unix, вы можете закрыть интерактивный поток ввода, набрав CTRL - D. Эта ситуация заставляет getchar()
вернуться EOF
. Но если файл содержит символ, код ASCII которого равен 4 (т. Е. CTRL - D), getchar()
вернется 4, а не EOF
.
привет я думаю, что это becoz в потоке -1 не один, а два символа и ASCII для ни один из них -1 или любой другой используется для EOF
Он все еще работает с голец типа данных. Но трюки проверяют состояние в цикле с значением int.
Первый: давайте проверим его. если вы пишете следующий код, как
printf("%d",getchar());
И затем, если вы дадите ввод с клавиатуры Вы должны увидеть , который ASCII значение или если вы даете CTRL - D см. -1.
Так что, если вы реализуете эту логику, то код решения является
#include<stdio.h>
int main()
{
char c;
while ((c = getchar()) != EOF){
putchar(c);
//printf("%c",c); // this is another way for output
}
return 0;
}
Вы используете библиотеку GNU? – rahul
Нет, платформа Win32 –
Доза Ctrl-D не работает? –