为什么这个y / n程序没有输出

时间:2012-10-01 17:23:05

标签: c string conditional stdin

我遇到一个小C程序的问题。它输出一个问题(见下面的代码),我可以将输入放入(y和n),但之后没有其他任何事情发生,即使它是根据输入的输入(y或n)打印某些东西。但是,在我的问题之后没有输出任何内容,程序就会退出。这是代码:

#include <stdio.h>

int main()
{
        char string [80];
        static char y;
        static char n;
        printf( "ARE YOU SHAQIRI? [y/n]: " );
        scanf( "%s", string );
        if ("%s" == "y")
                printf("That's impossible. YOU CANNOT BE SHAQIRI YOU IDIOT");
        else if ("%s" == "n")
              printf("I thought not.");
        fflush ( stdin );
        return 0;
}

4 个答案:

答案 0 :(得分:6)

您的比较中有两个问题:if ("%s" == "y")

  • "%s"是您的scanf 格式字符串。如果scanf成功阅读输入,则结果位于您的变量中:string
  • 请勿使用==来比较字符串。您应该使用strcmp

因为您在两个if测试中都使用了这种形式的比较,所以两个分支都没有执行,并且您看不到输出。

另请勿在{{1​​}}上致电fflush。您可能打算stdin在那里。

答案 1 :(得分:0)

这不是你在C中比较字符串的方式,你需要使用strcmp。此外,您需要比较变量string,而不是"%s"

答案 2 :(得分:0)

scanf()将返回的值存储在第二个参数中。见here。其次你正在纠正错误的字符串...使用strcmp

我只是把它扔到那里作为你的程序的简化:

  1. 使用单个字符来存储单个字符串输入
  2. 你现在可以按照你想要的方式保持你的条件“==”
  3. 删除了stdin的fflush,你不应该这样做。
  4. 为非'y'/'n'输入值添加了“全部捕获”案例。
  5. 以下是修改后的代码:

    #include <stdio.h>  
    int main() {
        char input;
        printf( "ARE YOU SHAQIRI? [y/n]: " );
        input = getchar();
        if (input == 'y')
            printf("That's impossible. YOU CANNOT BE SHAQIRI YOU IDIOT");
        else if (input == 'n')
            printf("I thought not.");
        else
            printf("Not valid input...");
        return 0; 
    } 
    

答案 3 :(得分:0)

C没有用于比较字符数组的内置运算符,因此您调用strcmp,如下所示:

if(strcmp(string, "yes") == ) 
{
    /* User said yes */
}

确保#include <string.h>