所以我有这个代码,它应该从用户那里得到坐标:
#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);
}
}
据我所知,这应该继续从用户那里获取坐标,但是它只需要一次,然后以一种非常奇怪的方式粉碎,就像它没有任何理由跳过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
我感到非常困惑,因为这是一个简单的代码,而且我不知道是什么导致了这个问题。任何人?(如果它有任何区别,我的系统是山狮)
答案 0 :(得分:5)
一种可能的解决方案是添加空格以跳过空格:
scanf(" %c",&letter);
^
正确指出用户“未定义的行为”时,您还应检查返回值。在这种情况下,您希望返回值等于您正在阅读的项目数,如果返回值为<0
,那么您将无法再从stdin
读取并且返回值小于该数字您正在阅读的项目表示您有转换错误。
答案 1 :(得分:3)
scanf(" %c",&ch);
这样做的原因是第一个空格会刷新标准输入,然后让用户输入字符。
如果您在/n
之前放置/t
或%c
答案 2 :(得分:-1)
我个人不喜欢使用scanf。此函数使输入流处于不如其定义的状态。 我更喜欢结合sscanf的fgets ......