C语言中fscanf读出来怎么是这样地,求教,下面是详细

//这是主程序
char myanswer[10];
fscanf(fq,"%s %s %s",&sel[i].question,&sel[i].questionxuanxiang,&sel[i].selanswer);
fclose (fq);
printf("%s %s %s",sel[i].question,sel[i].questionxuanxiang,sel[i].selanswer);
scanf("%s",myanswer);
if(myanswer=='a')
count++;
//这是存储程序
for (i=1;i<=2;i++)
{
printf("please input the question:");
gets(sel[i].question);
printf("%s",sel[i].question);
printf("please input your selection:");
gets(sel[i]. questionxuanxiang);
printf("%s",sel[i]. questionxuanxiang);
printf("input answer selection:");
gets(sel[i].selanswer);
fprintf(fp, "%s %s %s",sel[i].question,sel[i].questionxuanxiang,sel[i].selanswer);
fputc('\n', fp);
}
进文件看也是对的,出来的结果怎么就这样了??
这里文件读取的应该是1.What's your name??
为什么只有sel.[i].question对应的是1.what's
sel.[i].questionxuanxiang对应的是your
,sel[i].selanswer对应的是name?

第1个回答  2012-12-09
这是scanf的输入搜索机制引起的,在本程序中, 它以空白字符为搜索间隔符; 而gets以回车为间隔符.
所以最好使用fscanf, 和fprintf, 它们是一对输入输出函数.
本程序的错误之处在于: 存储程序gets可以输入空格, 而scanf却会以空格分隔输入.
例如 :
gets(sel[i].question); //你输入"please input question", 这个串将存储进来, 而你用scanf("%s",sel[i].question); 时, 只有"please"会存储进来
...
gets(sel[i]. questionxuanxiang);//同上
...
gets(sel[i].selanswer);//同上追问

我要问的不是这个,我截了图,你帮我看看

追答

已经回答了你的提问了, scanf和fscanf都是以空格为分隔符的输入.
而正好你的"1.what's your name ?", 第一个空格符在1.what's后面, 所以就得到你的这样结果了

第2个回答  2012-12-09
没看到你的fopen语句。也不知道你的字符串中是否含空白。
也没看到写完文件是否关闭文件了。

fscanf(fq,"%s %s %s", -- 这种格式,空白号是分隔符。
if(myanswer=='a') -- char myanswer[10]; 要用 strcmp() 比较字符串:
if (strcmp(myanswer,"a") == 0) ....追问

fopen有的,我截了图,你看看是怎么回事

追答

你的读语句与要读的内容格式不配套。%s 读到空白就不读了。

char s[30];
fscanf(fq,"%[^?]", s); 内容 1.what's your name ? 可以读到问号,不包括问号。

比较简单的办法是建文件时一个字符串 内容放一行,含空白。
读时,用fgets 读一行。

追问

fgets怎么用啊,求教

追答

char mystring[80];
fgets (mystring , 80 , fq); --- 读一行,允许含空白,标点,直到 "\n" 为止,含"\n".

本回答被提问者和网友采纳
相似回答