2017-02-09 3 views
-10
fscanf(file,"%d %d",&int_var1,&int_var_2); ` 
fscanf(stdin,"%d %d",&int_var1,&int_var_2); 

Пожалуйста, дайте мне подробное объяснение. Какое использование stdin и stdout в fprintf() и fscanf()?В чем разница между этими двумя строками кода?

+4

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

+0

Это не домашнее задание. Я просто сомневаюсь в этом. Я имею в виду, они оба одинаковые или они разные.Если они разные, то что их отличает. –

ответ

1

fscanf(file, ...) читает из открытого файла file.

fscanf(stdin, ...) читает с «стандартного ввода» (обычно это ваша клавиатура). Обратите внимание, что стандартный ввод не является файлом, но в любом случае он рассматривается как один.

+0

Спасибо..Для простого и точного объяснения. –

0

Я думаю, вы спрашиваете, почему 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) и подключается к входному терминалу пользователи

+0

Нет. Это не мое сомнение. Мое сомнение заключается в том, что два оператора кода одинаковы или различны. Если отличается, что это отличает их?. Я имею в виду, что для stdin –

+0

Почему этот ответ получает downvotes? Это выглядит отлично. – RoadRunner

0

Посмотрите на это таким образом ...

Глобальная 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 для печати на вывод ошибок.

Смежные вопросы