我有以下代码:
#include<stdio.h>
#include "commonf.h" //So, this is the way you include from a directory?
void main(){
println("Welcome to Number Guesser v 0.1 ");
println("Think of a number between 0 and 100 (and please, make it an integer!)");
println("Legend: Y=Yes B=Bigger than that S= Smaller than that");
int guessed=0;
float curnum=100.0;
char cursign='?';
while(cursign!='y'){
if(cursign=='?' || cursign=='s'){
curnum=curnum/2;
}
else if(cursign=='b'){
curnum=curnum+curnum/2;
}
else{
printf("You are wrong. Stop it. %c . TEESST",cursign);
}
char askstring[4096];
sprintf(askstring,"%s%f%s","Is your number ",curnum," ? (y/b/s)");
println(askstring);
scanf("%c",&cursign); //Scanf has to expect a new line for some reason.
}
}
(我粘贴了所有这些,因为我是一个c菜鸟)
如果代码如下所示,循环将按用户输入执行两次,一次使用cursign =执行用户输入的内容,一次使用等于\ n。
如果我将scanf行更改为
scanf("%c\n",&cursign);
它要求第一次输入两次,然后作为一个魅力。有什么问题,我该怎么办?
答案 0 :(得分:3)
将此scanf("%c\n",&cursign);
更改为此scanf(" %c",&cursign);
。这将占用尾随的换行符。
另外,根据标准main
应该返回int
(即使这不是您的问题的原因)。根据C标准,主要应该是int main(void)
或int main(int argc, char* argv[])
输入y
之类的字符并按ENTER键时,一个字符(您输入的字符)和一个字符(输入击键 - 换行符)将被放入输入缓冲区。第一个字符被scanf
消耗,但换行符仍然在输入缓冲区中,所以当下次输入3个字符newlinechar + 'y' + newlinechar
时会发生这种情况。这使得scanf
表现得很有趣。
这是Grijesh的一个很棒的链接 - C Printf and Scanf Reference