将单个字符扫描到数组C编程

时间:2011-09-30 05:12:41

标签: c arrays char skip

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

3 个答案:

答案 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]);