【问题标题】:Differentiate scanning one char or multiple区分扫描一个字符或多个字符
【发布时间】:2018-12-03 23:53:52
【问题描述】:

我需要区分一次扫描一个字符或多个字符并按回车键确认(无 CTRL+D)。

    do{
        scanf(" %c%c", &letters[i],&temp);
        i++;
      }while(temp != '\n');

它适用于一个字符,但是当我输入多个字符并按 Enter 时,它会等待另一个输入。我需要按回车键一次来弄清楚。

【问题讨论】:

    标签: c char scanf


    【解决方案1】:

    区分扫描一个字符还是多个

    OP 方法失败,因为 " " 使用任何空格,包括 '\n',并且可能不会被捕获为 temp

    // Troublesome code
    do {
      scanf(" %c%c", &letters[i],&temp);
      i++;
    } while(temp != '\n');
    

    查找'\n'。可以逐个字符地做到这一点。

    #define N 2
    char letters[N]; 
    size_t i = 0;
    int ch;
    while ((ch = getchar()) != '\n' && ch != EOF) {  // Loop until \n found
      if (i < sizeof letters) {                      // Save up to N characters.
        letter[i++] = ch;
      }
    }
    
    // Limit output with a precision                     v----------vvvvvvv 
    printf("%zu characters entered: The first few are <%.*s>\n", i, (int) i, letters);
    

    【讨论】:

    • 我在循环中使用它,第一次输入一个字符执行正确,但第二个输入一个字符没有执行。它像非打印字符'▒'一样输出。
    • 我正在为我的学校项目做这个。刽子手游戏,你猜字母或者你可以尝试一次猜出整个单词
    猜你喜欢
    • 1970-01-01
    • 2017-11-23
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    相关资源
    最近更新 更多