我应该写一个简短的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;
}
答案 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` */