使用带有字母串和用户输入的if语句

时间:2011-07-22 19:26:24

标签: objective-c if-statement

Helllo我仍然是编程的新手,并且在使用用户输入时使用if语句与我进行的研究有一个问题我似乎无法找到我做错了什么? 下面是我发布的简单乘法计算器。

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
int a ;
int b ;
int c ;
printf("\n");
printf("\n");
printf("Welcome to calculator");
printf("\n");
printf("\n");
printf("what would you like to choose for first value?");
scanf("%d", &a);
printf("\n");
printf("What would you like to input for the second value?");
scanf("%d", &b);
c = a * b;
printf("\n");
printf("\n");
printf(" Here is your product");
printf("\n");
NSLog(@"a * b =%i", c); 

char userinput ;
char yesvari = "yes" ;
char novari = "no";

printf("\n");
printf("\n");
printf("Would you like to do another calculation?");
scanf("%i", &userinput);



if (userinput == yesvari) {
    NSLog(@" okay cool");



}

if (userinput == novari) {

    NSLog(@"okay bye");
}

返回0; }

3 个答案:

答案 0 :(得分:2)

您使用%i错误地扫描了角色,您需要使用strcmp对其进行比较。如果要查找用户的字符串,则需要使用%s,并且需要一个足够大的字符缓冲区来保存输入。

试试这个

//Make sure userinput is large enough for 3 characters  and null terminator
char userinput[4];

//%3s limits the string to 3 characters
scanf("%3s", userinput);

//Lower case the characteres
for(int i = 0; i < 3; i++)
    userinput[i] = tolower(userinput[i]);

//compare against a lower case constant yes
if(strcmp("yes", userinput) == 0)
{
    //Logic to repeat
    printf("yes!\n");
}
else
{
    //Lets just assume they meant no
    printf("bye!\n");
}

答案 1 :(得分:1)

我认为您正在使用错误的格式char阅读%iscanf("%i", &userinput);

我认为使用@NSString而不是简单的char更好(我甚至不确定如果你写char a = "asd"会在ObjC中发生什么,因为你给了char一个{ {1}}值)。在这种情况下,因为字符串是指针you cannot use == to compare them。您可以改用char[]isEqualToString。如果您对两者之间的差异感兴趣,请查看this post会有所帮助。

答案 2 :(得分:0)

在C中,您无法使用==比较字符串,因此您必须使用strcmp()之类的函数,如下所示:

if ( !strcmp(userinput, yesvari) ) {
   //etc.
}

使用bang(!)是因为strcmp()在两个字符串匹配时实际返回0。欢迎来到C的精彩世界!