【问题标题】:Why isn't anything being saved to my character array? [duplicate]为什么没有任何东西被保存到我的字符数组中? [复制]
【发布时间】:2015-12-11 02:06:06
【问题描述】:

我正在尝试让用户输入一串字符。我希望我的程序一次一个地继续扫描字符,直到它看到 \n 字符(即,当用户按下 ENTER 键时)。

看来我编写的代码由于某种原因没有将字符存储到数组中。我知道这一点是因为包含printf() 语句的for 循环不会重现输入终端的字符。我最后的努力是打印出a[0],以防我的循环出现问题,但它仍然表明我的字符数组中没有存储任何内容。

有什么解释吗? (请不要建议我使用 string.h 库——我不想将它用于我的目的。)

#include <stdio.h>

int main(void)
{
  char a[21];

  int i;

  printf("enter a bunch of characters: ");

  for (i = 0; ; i++)
    {
      scanf("%c", &a[i]);
      if (a[i] = '\n')
        {
          break;
        }
    }

  printf("the size of char array is %d\n", sizeof(a)/sizeof(a[0]));

  for (i = 0; a[i] != '\0'; i++)
    {
      printf("%c", a[i]);
    }

  printf("%c", a[0]);

  return 0;
}

【问题讨论】:

  • 第二个for 循环查找a[i] != '\0',但您从未将空字节放入数组中。
  • typo: if (a[i] = '\n')'\n' 分配给 a[i],并评估为“真”。然后我们立即退出循环。你的意思是说if (a[i] == '\n')
  • 啊哈!感谢您指出@PaulRoub。对我来说这是一个菜鸟的错误。还有@Barmar,我没有意识到我必须自己这样做。我以为\0 在声明时会自动转到该区域的最后一个元素?
  • 自动变量未使用任何特定值进行初始化。全局变量和静态变量自动初始化为全0。
  • for 循环应该限制字符数,即for (i=0; i&lt;20; i++),这样用户就不会超出缓冲区。此外,您的编译器应该已发出有关拼写错误的警告。如果没有,您需要使用更高的警告级别。

标签: c arrays scanf


【解决方案1】:
if (a[i] == '\n') { break; }

如上修改if语句并检查。

【讨论】:

    猜你喜欢
    • 2013-04-30
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多