这个简短的C代码有什么问题

时间:2014-01-26 19:24:19

标签: c scanf

我正在尝试扫描输入,如果用户键入“是”则输入“etc”否则退出。但它没有正常工作,当我输入是,它表示无效。提前谢谢。

#include <stdio.h>
char yes='yes';
char name[100];


int main()

{

    puts("Starting History Project please Enter your name: ");

    scanf("%s",&name);

    printf("Hey %s!",name);

    puts("My name is C! Are you interested about my history? yes or no");



    scanf("%s", &yes);
    if (yes == 'yes')
    {
        printf("Starting ADT \n");
    }
    else
    {
        printf("Invalid\n");
        exit(0);

    }

    return(0);
}

5 个答案:

答案 0 :(得分:2)

变量yes是一个char,因此只能包含一个字符或转义序列。将char与'yes'进行比较就像将字母'y'与“yes”进行比较。 'yes'是非法的,它是一个字符串,不能有单引号。您应该使用0 == strcmp(inputStr, "yes")代替。

答案 1 :(得分:1)

我的编译器推出了以下警告,也许你应该修复它们?

foo.c:2:10: warning: multi-character character constant [-Wmultichar]
char yes='yes';
         ^
foo.c:2:10: warning: implicit conversion from 'int' to 'char' changes value from 7955827 to 115
      [-Wconstant-conversion]
char yes='yes';
     ~~~ ^~~~~
foo.c:12:16: warning: format specifies type 'char *' but the argument has type 'char (*)[100]' [-Wformat]
    scanf("%s",&name);
           ~~  ^~~~~
foo.c:21:16: warning: multi-character character constant [-Wmultichar]
    if (yes == 'yes')
               ^
foo.c:21:13: warning: comparison of constant 7955827 with expression of type 'char' is always false
      [-Wtautological-constant-out-of-range-compare]
    if (yes == 'yes')
        ~~~ ^  ~~~~~
foo.c:28:9: warning: implicitly declaring library function 'exit' with type 'void (int) __attribute__((noreturn))'
        exit(0);
        ^
foo.c:28:9: note: please include the header <stdlib.h> or explicitly provide a declaration for 'exit'
6 warnings generated.

另外,

  1. ==不会在C中进行字符串比较。
  2. 您尚未为yes问题分配空间。

答案 2 :(得分:0)

答案 3 :(得分:0)

如果yes要接收字符串,那么您应该将其定义为字符串,就像name一样。

char yes [32];

例如。

在测试中:

 if (yes == 'yes')

'分隔符用于字符常量而非字符串常量 - 您需要"

此外,在C中,字符串不是第一类数据类型,因此您不能简单地使用==运算符测试相等性。相反,玩具需要库支持字符串操作(或逐个字符测试):

if( strcmp( yes, "yes" ) )

scanf调用本身,标识符name已经是一个地址,&不是必需的,实际上会导致错误的行为。

答案 4 :(得分:0)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
    char name[100];
    char input[16];

    puts("Starting History Project please Enter your name: ");
    scanf("%s", name);

    printf("Hey %s! ", name);

    puts("My name is C! Are you interested about my history? yes or no");
    scanf(" %s", input);
    if (!strcmp(input, "yes")){
        printf("Starting ADT \n");
    } else {
        printf("Invalid\n");
        exit(0);
    }

    return 0;
}