if语句在C中用字符串比较

时间:2017-11-08 19:57:19

标签: c if-statement random string-comparison fgets

我应该写一个简短的C代码,如果我输入" random"我会生成1到6之间的随机数。如果我输入"退出"或者"退出",程序必须结束。 "退出"和"退出"工作,但当我输入"随机"。

时没有任何反应
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    printf("enter your command");
    char input[100];
    fgets(input, 100, stdin);

    if (strcmp(input, "quit") == 0){
       exit(0); 
    } else if (strcmp(input, "exit") == 0) {
       exit(0);
    } else if (strcmp(input, "random") == 0) {
       srand(time(NULL));
       int random_number = rand() %7;
       printf("%d\n",random_number);     
    }
    return 0;
}

2 个答案:

答案 0 :(得分:4)

您需要删除可附加到'\n'读取的字符串的换行符fgets

例如

char input[100];
input[0] = '\0';

if ( fgets (input, 100, stdin) )
{
    input[strcspn( input, "\n" )] = '\0';
}

考虑到此声明中的初始化程序

int random_number = rand() %7;

生成[0, 6]范围内的数字。如果您需要范围[1, 6],那么初始化程序应该看起来像

int random_number = rand() %6 + 1;

根据C标准,没有参数的函数main应声明为

int main( void )

答案 1 :(得分:3)

您的fgets来电正在读取插入的命令以及最后的换行符。因此,您也应该与换行符进行比较,或者选择不同的输入读取方法(例如使用scanf,对处理任何空格非常有用,或者自己删除换行符。)

strcmp(input, "quit\n") == 0
strcmp(input, "exit\n") == 0
strcmp(input, "random\n") == 0

您没有注意到前两个命令,但它们也没有通过测试。

您还可以添加最终else来抓取任何不匹配的内容。只改变它(不处理换行符)将证明其他人也不匹配:

/* ... */
} else {
    printf("unknown command\n");
}

使用scanf的示例:

char input[101];
scanf(" %100s", input); /* discards any leading whitespace and
                         * places the next non-whitespace sequence
                         * in `input` */