用户输入' y'

时间:2014-10-13 21:46:21

标签: c printf scanf

我似乎无法弄清楚我在以下简单代码中做错了什么。如果输入y,它应打印出0..9,否则退出。

void userInput(char *in);

int main()
{

    int i;
    char c;

    setbuf(stdout, 0);

    userInput(&c);

    while(c == 'y'){
        for (i = 0; i < 9; i++) {
            printf("\n%c", i);
        }
        userInput(&c);
    }
    printf("\nGoodbye!");
    return 0;
}


void userInput(char *in)
{
    printf("\nPrint numbers 0 to 9? (y/n) ");
    scanf("%c",in);
    fflush(stdin);

    while ( (*in !='y') || (*in != 'n') ){
        printf("\nUnknown command. Press (y/n)");
        scanf("%c",in);
        fflush(stdin);
    }
}

1 个答案:

答案 0 :(得分:1)

您正在使用format specifier %c,它会打印出具有给定值的ASCII字符。 ASCII characters 0到9都是不可打印的控制字符或各种形式的空格。

您希望使用%d来打印出十进制整数。

printf("\n%d", i);

顺便说一句,您还应该将换行符(\n)放在字符串的末尾,而不是开头。用户输入y后输入键已经前进了行,默认情况下stdio是行缓冲,这意味着在到达换行符之前它可能不会打印任何内容。这意味着您可能看不到提示(因为没有尾随换行符),也没有看到&#34; Goodbye!&#34;信息。如果您不希望在提示后有换行符,而不是在末尾添加换行符,则可以调用fflush(stdout)以确保刷新缓冲区,将其打印到终端。

编辑:啊,我注意到你在上面禁用了stdout的缓冲。这也有效,但通常最好保留默认缓冲并在需要时明确刷新。