【问题标题】:How to input a character in character array using loop in C? [duplicate]如何使用C中的循环在字符数组中输入字符? [复制]
【发布时间】:2014-06-08 14:30:27
【问题描述】:

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

INPUT:
a b
c d
e f upto n times

我已经声明了两个数组char a[n],b[n];,我想在a[0]中输入a,在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 a `

【问题讨论】:

  • “它不起作用”有点含糊。发生什么了?它显示什么?
  • 现在它可以工作了,但是输出和输入之间多了一条线。但我没有使用任何换行符?

标签: c arrays pointers


【解决方案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)

【讨论】:

  • 非常感谢!!你拯救了我的一天..
  • 不客气@user3654540,我看到你被否决了,但我认为这是一个从未见过的人不容易处理的事情,所以我赞成你。跨度>
【解决方案2】:

%c 不跳过换行符。所以你的第二个scanf 将首先读取第一行末尾的换行符而不是'c'。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 2017-09-12
    • 2012-01-09
    • 1970-01-01
    相关资源
    最近更新 更多