【问题标题】:How do I scan less chars than defined into an array?如何扫描少于定义到数组中的字符?
【发布时间】:2019-11-17 18:30:47
【问题描述】:

我在尝试将字符扫描到数组时遇到了问题。

这是扫描循环 -

char letter[6] = {0};
for(int i = 0; i <= 5; i++)
{
    scanf(" %c", &letter[i]);
}

期望的结果是,如果输入小于 6,则每个未从 scanf 接收值的元素都保持为 0。

但是,如果我尝试输入例如 3 个字符,我将无法在程序中继续。

另一方面,当我尝试从 txt 文件中输入 3 个字符时,程序可以正常工作并且我达到了预期的结果。

我想知道解决此问题的正确方法是什么。

提前谢谢大家。

【问题讨论】:

  • "如果我尝试输入例如 3 个字符" 您是否为此按下了 4 个键?提示,寻找 键。
  • 我尝试过以多种组合方式直接输入 1-5 个字符,但是只有当我通过 txt 文件输入输入时程序才会运行,否则 scanf 将等到我输入剩余的字符。跨度>

标签: c arrays input scanf


【解决方案1】:

由于格式中有空格,代码无法检测到'\n'Enter)。

scanf(" %c",&amp;letter[i]); 中的" " 消耗并丢弃包括'\n' 在内的所有空白,因此代码失去了检测行尾的方法。

改为检查扫描是否失败(stdin 关闭或罕见的输入错误)或者是否读取了 '\n',然后中断循环。

for(int i=0; i<=5; i++) {
  char ch;
  if (scanf("%c", &ch) != 1 || ch == '\n') {
    break;
  }
  letter[i] = (char) ch;
}

要确保letter[] 是一个字符串,请将最后一个元素保留为空字符

// for(int i=0; i<=5; i++) {
for(int i=0; i < 5; i++) {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-27
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    相关资源
    最近更新 更多