此问题在此处已有答案:
How do I properly compare strings in C?(10个答案)
28天前关闭。
所以,我试图使一个基于文本的游戏,以帮助人们学习linux,我试图使它这样,如果你的名字是Linus Torvalds而不是你的指南是Linus Torvalds它将是理查德·斯托曼,问题是,与任何名称输入打印屏幕总是说,该指南是理查德·斯托曼.(使用C btw)
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//Global variables
char name[15];
char yesno[1];
//Main
int main(){
system("clear");
printf("???: Hello adventurer, are you here to learn Linux?\n");
printf("y/n\n");
scanf("%c", yesno);
if (strcmp("n", yesno)){
printf("???: Great!, What is your name?\n");
scanf("%s", name);
if("Linus Torvalds\n"){
printf("Achievment complete: In God We Trust\n");
printf("Nice to meet you!, my name is Richard Stallman.\n");
}else {
printf("Nice to meet you!, my name is Linus Torvalds.\n");
}
}
else if (strcmp("y", yesno)){
printf("Ok!, bye!");
}else {
printf("That's not an answer.\n");
}
}
字符串
我试过strcmp,mallocs,平原条件,但它不工作,如果有人有一个答案,这是非常apreciated。
P.S.
请尝试包括代码在您的答案和/或使他们尽可能详细,谢谢。
1条答案
按热度按时间xqkwcwgp1#
将
scanf
与%s
说明符一起使用将只读取单个字。如果要阅读由几个单词组成的整行(例如,"Linus Torvalds\n"
),那么我建议您改用fgets
。但是,要注意this problem中fgets
和scanf
的混合使用。另外,有关如何从fgets
输入中删除换行符的信息,请参见this question。我建议您完全不要使用scanf
进行用户输入,而应始终使用fgets
。条件
if("Linus Torvalds\n")
没有意义,因为该条件将始终为真。如果要将name
的内容与"Linus Torvalds\n"
进行比较,则需要使用strcmp
函数。还有,行
字符串
是错误的,因为函数
strcmp
要求它的两个参数都是指向字符串的指针,即转换为以空字符结尾的字符序列。但是,yesno
不是指针。&yesno
也是错误的,因为这样的指针只指向单个字符,而不是指向以空字符结尾的字符序列。如果两个字符串匹配,则函数
strcmp
将返回零,如果不匹配,则返回非零。因此,您可能希望将strcmp
的返回值与零进行比较。我建议你这样重写你的程序:
型
此程序具有以下行为:
x
的一个或多个字符