循环执行超过需要

时间:2013-10-26 11:36:08

标签: c scanf

我有以下代码:

#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);

它要求第一次输入两次,然后作为一个魅力。有什么问题,我该怎么办?

1 个答案:

答案 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