0

我在将字符扫描到数组中时遇到问题。每次我这样做时,它都会跳过下一次扫描并转到下一次。我知道发生了什么,因为输入还会在输入中添加“\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]);
}
4

3 回答 3

0

你可以这样做。

while((c = getchar()) != '\n')
{
    putchar(c);
}

这可能会解决您的问题。或者你也可以一直到 EOF。

于 2011-09-30T05:31:50.767 回答
0

您正在使用 2 个函数从标准输入中读取数据:getchar()scanf(). 你需要了解它们是如何工作的。

getchar()很简单:它返回输入流中的下一个可用字符(或等待一个或返回EOF

scanf("%d", ...)更复杂:首先,它可以选择丢弃空格(空格、回车、制表符……),然后读取尽可能多的字符来表示整数,并在第一个不能用于整数的字符处停止,像一个'\n'

当您将它们置于循环中时,您的getchar()调用将获取停止的角色,scanf()下一个scanf()将从那里开始。

如果您的输入类似于"q1w22e333r4444"(MAX == 4),您的程序将工作。

如果您的输入类似于

问 1
w 22
333
r 4444

在第一次通过循环(charray[0]gets'q'inarray[0]gets的地方1)之后,getchar()'\n'离开'w'“准备好”的scanf,这当然会失败......然后被下一个“抓住” getchar();并且"22"在第三次通过循环(到inarray[2])分配。

因此,您需要检查您的代码。

此外,scanf()返回一个值。使用该值

if (scanf("%d", &inarray[i]) != 1) /* error */;
于 2011-09-30T09:02:50.443 回答
-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]);
于 2011-09-30T08:36:29.637 回答