C语言存储问题,为什么字符串一长就不执行第二个SCANF??难道是越界??

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int i;
struct select
{
char question[1000];
char selanswer[100];
}sel[10];
void savesel()
{
FILE *fp;
if ((fp=fopen("b.txt","w"))==NULL)
{
printf("cannot open file");
return;
}
if (fwrite(&sel,sizeof(struct select),1,fp)!=1)
printf("error\n");
fclose (fp);
}
void main()
{
for (i=0;i<1;i++)
{
scanf("%s",&sel[i].question);
printf("input answer selection:");
scanf("%s",&sel[i].selanswer);
}
savesel ();
}

第1个回答  2012-12-08
输入sel[i].question及sel[i].selanswer前面的取地址符号是可以不要的,字符数组的首地址就是数组名,还有就是通过你这种scanf输入方式是只能读取连续输入,有空格的话就会结束,而剩下的内容会驻留在缓冲区内,当碰到下一个scanf时再从缓冲区中读,这样表面上感觉就是没有执行第2个scanf,不知道你是不是这个问题
第2个回答  2012-12-08
scanf("%s",&sel[i].question);
printf("input answer selection:");
scanf("%s",&sel[i].selanswer);
上面的两个scanf中的sel[i].question和sel[i].selanser已经是字符数组的起始地址,所以你要把这两句中的&去掉才可以。
要不就用gets(sel[i].question);这样读含有空格的字符串
第3个回答  2012-12-08
scanf 以空格做为分隔符,不能输入空格。可以用gets()本回答被提问者采纳
第4个回答  2012-12-08
你说的第二个scanf 是 输入selanswer 还是 第二次输入question?
相似回答