如何在C中使用循环在字符数组中输入字符?

时间:2014-06-08 14:30:28

标签: c arrays pointers

我想要做的是在循环中输入字符数组中的字符。我是c编程的新手,并且不太了解指针的使用。我的输入是这样的:

INPUT:
a b
c d
e f upto n times

我已声明了两个数组char a[n],b[n];,我想在a[0]中输入一个,b[1]中的b,a[2]中的c ...

这是我的尝试

char a[n],b[n];
for(i=0;i<n;i++)
{
  scanf("%c %c",&a[i],&b[i]);
  printf("%c %c",*(a+i),*(b+i));
}

但这不起作用!!如果我输入:a b输出是a  `

2 个答案:

答案 0 :(得分:1)

如果我运行你的代码,我会

a b
a bc d

 c  d

这意味着,在每一行之后输入的输入将被scanf()解释为输入字符,因为您告诉她读取字符。此外,我有n = 3,但循环运行两次,这也支持这个想法。

您应该将scanf()更改为:

scanf(" %c %c",&a[i],&b[i]);

会吃新线。

这是一个最小的例子:

int main(void) {
  int n = 3;
  int i;
  char a[n],b[n];
  for(i=0;i<n;i++) {
    scanf(" %c %c",&a[i],&b[i]);
    printf("%c %c\n",*(a+i),*(b+i));
  }
  return 0;
}

输出:

a b
a b
c d
c d

printf()中的换行符只是用于格式化优雅,而不是更多,就像评论错误地提出的那样。

如果您愿意,可以阅读我的页面:

Caution when reading char with scanf (C)

答案 1 :(得分:0)

%c不会跳过换行符。因此,您的第二个scanf将首先读取第一行末尾的换行符,而不是“c”。

您可以将scanf更改为scanf("%1s %1s", &a[i], &b[i]);,但之后您必须将数组的大小增加一个。