我不明白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;
}
答案 0 :(得分:3)
来自文档(man scanf
):
scanf()
函数从标准输入流stdin中读取输入,fscanf([FILE * stream, ...])
从流指针流中读取输入[...]
stdin
是FILE*
。它是一个输入流。
来自文档(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