scanf inside while while循环只工作一次

Leo*_*Leo 0 c scanf while-loop

所以我有这个代码,它应该从用户获取坐标:

#include <stdio.h>
#include <time.h>

int main() {
int number;
char letter;
int points = 3;
    while(points < 8){
        printf("give me first coordinate (letter)");
        scanf("%c",&letter);
        printf("give me second coordinate (number)");
        scanf("%d",&number);
    }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,这应该继续从用户那里获取坐标,但是它只需要一次,然后以一种非常奇怪的方式粉碎,就像它没有任何理由跳过scanf一样.这是我的输出:

give me first coordinate (letter)a
give me second coordinate (number)1
give me first coordinate (letter)give me second coordinate (number)12
give me first coordinate (letter)give me second coordinate (number)df
give me first coordinate (letter)give me second coordinate (number)give me first coordinate (letter)give me second coordinate (number)sss
Run Code Online (Sandbox Code Playgroud)

我觉得很困惑,因为这是简单的代码,我没有slightes的想法是什么导致这一点.任何人?(如果它有任何区别,我的系统是山狮)

Sha*_*our 5

一种可能的解决方案是添加空格以跳过空格:

scanf(" %c",&letter);
       ^
Run Code Online (Sandbox Code Playgroud)

正确指出用户"未定义的行为"时,您还应检查返回值.在这种情况下,您希望返回值等于您正在读取的项目数,如果<0您不能再读取stdin返回值并且返回值小于您正在读取的项目数,则表示您有一个转换错误.