0

我知道您可以使用 scanf 并获取要在 if 子句中使用的字符,但是,有没有办法用字符串来做到这一点?

例如

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}
4

3 回答 3

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)
于 2012-12-10T23:52:45.353 回答
0

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

下面是一个使用 scanf 的例子:

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

现在,话虽如此,请注意使用 scanf 读取字符串。例如,上面的示例仅在您输入多字字符串时才返回第一个字。

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

于 2012-12-10T23:53:34.307 回答
0

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

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

这会起作用

于 2012-12-10T23:53:42.390 回答