使用scanf获取字符串,然后使用带有该字符串的if语句,而不是c语言中的字符

时间:2012-12-10 23:49:08

标签: c string if-statement scanf

我知道你可以使用scanf并在if子句中使用一个字符,但是,有没有办法用字符串来做?

e.g。

printf("enter 'foo' to do 'bar', otherwise enter 'hay' to do 'wire');
scanf("%string", &stringNAME); //this is the part where I have no idea what to do

if (stringNAME == 'foo'){do bar} //here, issues occur with multicharacter character :/
if (stringNAME == 'hay'){do wire}

3 个答案:

答案 0 :(得分:1)

你几乎得到了它,只是做了一些调整。

char stringNAME[10];
printf("enter 'foo' to do 'bar', otherwise enter 'hay' to do 'wire');
scanf("%9s", stringNAME); 

if (!strcmp(stringNAME,"foo"){do bar}
if (!strcmp(stringNAME,"hay")){do wire}

注意scanf中的数字,即9.应该比输入字符串的大小少一个(或更小)。否则你冒着缓冲区溢出的风险,这是一个讨厌的业务。 fgets是更好的选择,因为您被迫限制字符数。这就是你要这样做的方法(只需替换scanf行)

fgets(stringNAME, 10, stdin)

答案 1 :(得分:0)

您可以使用带有%s说明符的scanf来读取字符串,但请确保您正在读取字符串(例如:char数组,动态分配的char *等等)。我看不到你的其余代码,但是从你提供的代码片段中,我对& stringName的含义有点怀疑。

以下是使用scanf的示例:

char s[100];
scanf("%s", s);

现在,请注意使用scanf来读取字符串。例如,上面的示例只会在您输入多字符串时返回第一个单词。

如果你知道你需要scanf罚款;否则,如有疑问,请使用fgets。

答案 2 :(得分:0)

字符串是char的向量,如果它们位于相同的内存地址中,则(str1 == str2)将返回。

if(strcmp(stringName, "foo") == 0){
//stringName is Foo
}

这将起作用