什么是 stdin 以及它如何与 fscanf 一起使用?

Emr*_*rah 3 c stdin file scanf randomaccessfile

我不明白 stdin 和 fscanf 之间的联系

struct musteri{
    int no;
    char name[40];
    char surname[25];
    double arrear;

};



 int main() {

    struct musteri hesapBilgi={0,"","",0.0};

    FILE *ptr;
    if((ptr=fopen("eleman.txt","r+"))==NULL){
        printf("error");
    }

    else{
        printf("\n enter a no if you want exit enter 0 -->");   
        scanf("%d",&hesapBilgi.no); 
Run Code Online (Sandbox Code Playgroud)

scanf 接受输入并将 no 放入 sturct musteri

while(hesapBilgi.hesapno !=0){


            printf("enter a surname name and arrear --->"); 
            fscanf(stdin,"%s%s%lf",hesapBilgi.surname,hesapBilgi.name,&hesapBilgi.arrear);
Run Code Online (Sandbox Code Playgroud)

在这里 fscanf 读取文件中的数据吗?或者其他事情正在发生?

        fseek(ptr,(hesapBilgi.no-1)*,sizeof(struct musteri),SEEK_SET); 
Run Code Online (Sandbox Code Playgroud)

fseek 在做什么?

        fwrite(&hesapBilgi,sizeof(struct musteri),1,ptr);

        printf("enter a no :");
        scanf("%d",&hesapBilgi.no);


    }
    fclose(ptr);
}


return 0;
Run Code Online (Sandbox Code Playgroud)

}

alk*_*alk 6

从文档(man scanf):

scanf()函数从标准输入流 stdinfscanf([FILE * stream, ...])读取输入,从流指针流 [...]

stdin是一个FILE*。它是一个输入流。

从文档 ( man stdin)

在正常情况下,每个 UNIX 程序在启动时都会为其打开三个流,一个用于输入,一个用于输出,一个用于打印诊断或错误消息。这些通常连接到用户的终端 [...]

所以

scanf( ...
Run Code Online (Sandbox Code Playgroud)

实际上相当于

fscanf(stdin, ...
Run Code Online (Sandbox Code Playgroud)