我在将字符扫描到数组时遇到问题。每次我这样做都会跳过下一次扫描并转到下一次扫描。我知道发生了什么,因为输入也会在输入中添加'\ n',但我不知道如何解决它的原因。以下是一些示例代码:
char charray [MAX], ffs;
int inarray [MAX], i;
for (i = 0; i < MAX; i++)
{
charray[i] = getchar();
printf ("%c\n",charray[i]);
scanf ("%d", &inarray[i]);
printf ("%d\n",inarray[i]);
}
答案 0 :(得分:0)
你可以这样做。
while((c = getchar()) != '\n')
{
putchar(c);
}
这可能会解决您的问题。或者你也可以去EOF。
答案 1 :(得分:0)
您正在使用标准输入读取2个函数:getchar()
和scanf()
。你需要了解它们是如何工作的。
getchar()
很简单:它返回输入流中的下一个可用字符(或等待一个字符或返回EOF
)
scanf("%d", ...)
更复杂:首先,它可选地丢弃空格(空格,输入,制表符......),然后它读取尽可能多的字符来表示整数,并在第一个字符处停止不能用于整数,例如'\n'
。
当你将它们放在一个循环中时,getchar()
调用将获得停止scanf()
的字符,并且下一个scanf()
将从那里进行处理。
如果你的输入类似于"q1w22e333r4444"
(MAX == 4),你的程序就可以了。
如果您的输入类似
q 1 w 22 e 333 r 4444
第一次完成循环后(其中charray[0]
获得'q'
而inarray[0]
获得1
),getchar()
将获得'\n'
让'w'
“准备好”用于scanf,当然这会失败......然后被下一个getchar()
“抓住”;并且"22"
在第3次循环中被分配(到inarray[2]
)。
因此,您需要检查您的代码。
此外,scanf()
返回一个值。 使用该值
if (scanf("%d", &inarray[i]) != 1) /* error */;
答案 2 :(得分:-1)
您应该直接将字符串扫描到数组中,而不是使用scanf("%s",&charray);
但是,如果添加while(getchar() != '\n' );
语句,则代码将起作用。这将获得所有字符,直到'\ n'。
charray[i] = getchar();
do{
c = getchar();
}while(c != '\n' && c!= EOF);
printf ("%c\n",charray[i]);
scanf ("%d", &inarray[i]);
do{
c = getchar();
}while(c != '\n' && c!= EOF);
printf ("%d\n",inarray[i]);