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

时间:2016-08-20 06:35:18

标签: c file stdin 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); 

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);

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

        fseek(ptr,(hesapBilgi.no-1)*,sizeof(struct musteri),SEEK_SET); 

fseek在做什么?

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

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


    }
    fclose(ptr);
}


return 0;

}

2 个答案:

答案 0 :(得分:3)

来自文档(man scanf):

  

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

stdinFILE*。它是一个输入流。

来自文档(man stdin

  

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

所以

scanf( ...

实际上相当于

fscanf(stdin, ...

答案 1 :(得分:0)

int fscanf ( FILE * stream, const char * format, ... );

它从流中读取格式化输入。 和stdin是标准输入流

和fseek用于将与流关联的位置指示器设置为新位置。

SEEK_SET是一个标志,用于从文件的开始

设置位置

fseek的例子

#include <stdio.h>

int main ()
{
  FILE * pFile;
  pFile = fopen ( "example.txt" , "wb" );
  fputs ( "Fseek Hello World." , pFile );
  fseek ( pFile , 9 , SEEK_SET );
  fputs ( "no" , pFile );
  fclose ( pFile );
  return 0;
}

ouptut:Fseek Helno World