c - 循环执行超过需要

标签 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.
    }
}

(我是全贴的,因为我是菜鸟)

如果代码看起来像这样,循环将针对每个用户输入执行两次,一次使用 cursign= 到用户输入的任何内容,一次使用它等于\n。

如果我将 scanf 行更改为

scanf("%c\n",&cursign);

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

最佳答案

将此 scanf("%c\n",&cursign); 更改为此 scanf("%c",&cursign);。这将吃掉尾随的换行符。

此外,根据标准 main 应该返回一个 int(即使这不是您出现问题的原因)。根据 C 标准,main 应该是 int main(void)int main(int argc, char* argv[])

当你输入一个像 y 这样的字符并按下 ENTER 键时,一个字符(你输入的)和一个字符(回车键 - 换行符)被放置在输入缓冲区中. scanf 消耗了第一个字符,但换行符保留在输入缓冲区中,所以发生的情况是下次您在那里输入 3 个字符 newlinechar + 'y' + newlinechar。所以这使得 scanf 表现得很有趣。

这是来自 Grijesh 的一个很棒的链接 - C Printf and Scanf Reference

关于c - 循环执行超过需要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19606215/

相关文章:

c - 关于 fscanf 中指针的问题

c - scanf() 在 malloc 结构成员中不起作用

c - 如果前面的字符串为空,则 fscanf() 无法读取数字

algorithm - 使用 sscanf(),将字符串读取到 int 数组?

c - 在 C 中使用指针的 Scanf

c - 如何计算没有。包含子字符串 "00"的二进制字符串?

c - C的自动完成文本编辑器

c - 使用字母在C中绘制圆的最佳方法

c - 遇到 "\n"和 scanf 问题

c - scanf为short int的奇怪行为