fscanf(file,"%d %d",&int_var1,&int_var_2); `
fscanf(stdin,"%d %d",&int_var1,&int_var_2);
Пожалуйста, дайте мне подробное объяснение. Какое использование stdin и stdout в fprintf() и fscanf()?В чем разница между этими двумя строками кода?
fscanf(file,"%d %d",&int_var1,&int_var_2); `
fscanf(stdin,"%d %d",&int_var1,&int_var_2);
Пожалуйста, дайте мне подробное объяснение. Какое использование stdin и stdout в fprintf() и fscanf()?В чем разница между этими двумя строками кода?
fscanf(file, ...)
читает из открытого файла file
.
fscanf(stdin, ...)
читает с «стандартного ввода» (обычно это ваша клавиатура). Обратите внимание, что стандартный ввод не является файлом, но в любом случае он рассматривается как один.
Спасибо..Для простого и точного объяснения. –
Я думаю, вы спрашиваете, почему scanf(....)
и fscanf(stdin,....)
существуют, так как они делают то же самое
Ответ заключается в том, используя fxxxx версии позволяют мне писать код, который не зависит от файлов. т.е.
void Foo(FILE * f)
{
fscanf(f,....);
fprintf(f,....)
....
}
теперь я могу сделать Foo(stdin)
, Foo(file)
Видимо это еще не вопрос. Так вот ответ на актуальный вопрос
fscanf(file,"%d %d",&int_var1,&int_var_2);
говорит - читать символы из файла, на который указывает на FILE * указатель file
fscanf(stdin,"%d %d",&int_var1,&int_var_2);
говорит - читать символы из файла, на который указывает на FILE * указатель stdin
вы должны сделали file
самостоятельно, используя fopen
stdin
уже существует (его определенное в stdio.h) и подключается к входному терминалу пользователи
Нет. Это не мое сомнение. Мое сомнение заключается в том, что два оператора кода одинаковы или различны. Если отличается, что это отличает их?. Я имею в виду, что для stdin –
Почему этот ответ получает downvotes? Это выглядит отлично. – RoadRunner
Посмотрите на это таким образом ...
Глобальная variabls stdin
, stdout
и stderr
все определяется как
extern FILE *stdin, *stderr, *stdout;
Это файлы, открытые оболочкой, которая запускает вашу программу и всегда существует, когда вы вводите главную.
Существуют версии синтаксического сахара функций fxxxx (fscanf, fprintf и т. Д.), В которых отсутствуют ведущие «f» (scanf, printf и т. Д.). У них просто есть первый аргумент по умолчанию (scanf использует stdin, printf использует stdout).
scanf
может быть записана в виде обертки для fscanf
вот некоторые действительно неочищенное псевдокод
int scanf(const char *format, ...)
{
... // VA args stuff
int result = fscanf(stdin, format, ...);
... // More VA args stuff
return result;
}
Но вам нужно использовать fprintf
для печати на вывод ошибок.
вместо копирования вставьте свою домашнюю работу здесь, по крайней мере, покажите некоторый уровень понимания того, что вы разработали до сих пор. –
Это не домашнее задание. Я просто сомневаюсь в этом. Я имею в виду, они оба одинаковые или они разные.Если они разные, то что их отличает. –