0

我有一个小 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

4 回答 4

6

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

  • "%s"是你的scanf 格式字符串。如果scanf成功读取输入,则结果在您的变量中:string
  • 不要==用来比较字符串。你应该使用strcmp.

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

也别叫fflushstdin。你可能打算fflush(stdout)在那里。

于 2012-10-01T17:26:00.123 回答
0

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

于 2012-10-01T17:25:25.293 回答
0

scanf()将返回值存储在第二个参数中。见这里。其次,您正在错误地比较字符串...使用strcmp

我只是把它扔在那里,以简化你的程序:

  1. 使用单个字符存储单个字符输入
  2. 你可以按照你现在想要的方式保持你的条件“==”
  3. 删除了标准输入的 fflush,无论如何你都不应该这样做。
  4. 为非 'y'/'n' 输入值添加了“catch all”案例。

这是修改后的代码:

#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; 
} 
于 2012-10-01T18:03:10.793 回答
0

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

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

确保#include <string.h>

于 2016-09-15T05:36:14.320 回答