代码之家  ›  专栏  ›  技术社区  ›  Cyber Gh

c中scanf的奇怪行为

  •  -1
  • Cyber Gh  · 技术社区  · 7 年前
    int main(){
        int firstNumber, secondNumber, thirdNumber;
        char oper;
    
        scanf("%d", &firstNumber);
        printf("%d\n", firstNumber);
    
        scanf("%c", &oper);
        printf("%c\n", oper);
    
        scanf("%d", &secondNumber);
        printf("%d\n", secondNumber);
    
    
        return 0;
    }
    

    为什么这段代码不能像预期的那样工作,它读取第一个和第二个数字,但是oper char发生了一些奇怪的事情。

    1 回复  |  直到 7 年前
        1
  •  0
  •   FatalError    7 年前

    使用 scanf() 很难。这里,还有一个换行符留在 stdin 在第一个数字后按回车键。所以,你读的就是这个角色。一些格式转换忽略空白,但是 %c 没有。

    若要使其忽略前导空白,应改为使用

    scanf(" %c", &oper);
    

    格式字符串中的空格表示 SCAN() 若要忽略它找到的任何空白,则将读取非空白字符。