我需要在第17行添加额外的分号

时间:2013-08-25 00:24:53

标签: c gcc

我是C语言编程的新手,我正在尝试创建一个程序,当用户输入他们的名字时,他们会被告知他们的性取向是随机的。然而,gcc是错误的,因为我认为我错过了一个;第17行是:if(strcmp(x,arrayNames [i] == 0));.我对strcmp()不太熟悉;但是我在K& R中读到它,只是无法理解它。以下是整个代码:

int main()
{
    char *arrayNames[3]={"Jim", "Bob", "Dave"};
    char *arrayOrient[3]={"straight", "gay", "bi"};
    char x[100];
    srand(time(NULL));
    int size;
    size = sizeof(arrayNames)/sizeof(arrayNames[0]);
    int namesRand = rand() % size;

    printf("Please enter your name: ");
    scanf("%s", &x[0]);
    int i;

    for(i = 0; i < size; i++)
    {
        if(strcmp(x, arrayNames[i] == 0));
        {
            printf("Hello %s, your orientation is: %s", x, arrayOrient[namesRand]);
        break;
        }
        else
        {
            printf("Invalid name!");
        }
    }
    return 0;
}

使用strcmp()时的任何提示;将受到欢迎。

5 个答案:

答案 0 :(得分:5)

我认为您需要删除分号。在if语句中不需要分号。

答案 1 :(得分:2)

您遇到语法错误。以下是应该的行:

if(strcmp(x, arrayNames[i]) == 0)

在“arrayNames[i]”之后看到你需要的额外“)”吗? Strcmp compares two arguments如果两个字符串相同则返回“0”。

在“if”行的末尾删除额外的“);”(父母和不必要的分号)。

答案 2 :(得分:0)

您的代码未编译的原因是这是一个完整的声明

if(strcmp(x, arrayNames[i] == 0))
    ; // If the strings are the same, do an empty expression.

显然声明应该是:

if(0 == strcmp(x, arrayNames[i]))

现在我们有一个没有if的else代码块。所以编译器抱怨。

{
} else // This else doesn't match the if, the if is a single-line statement.

试试这个:

if(0 == (strcmp(x, arrayNames[i])))
{
    printf("Hello %s, your orientation is: %s", x, arrayOrient[namesRand]);
    break;
}
else {
        printf("Invalid name!");
    }
}

答案 3 :(得分:0)

当您在if语句后面加上分号时,如下所示:

(我没有像其他人那样提到错误的支架,我只是想澄清使用分号)

if(strcmp(x, arrayNames[i] == 0));
{
    printf("Hello %s, your orientation is: %s", x, arrayOrient[namesRand]);
    break;
        }
    else {
        printf("Invalid name!");
    }
}

标准说如果你没有为跳转语句添加braccets(作为循环或if语句) ,那么范围只是下一个表达式。

所以会发生什么:if语句引用分号;是什么意思,如果语句为真,则不会执行任何操作。由于没有与分号关联的表达式,因此该语句已被调用,并且在任何情况下都执行包含范围,不包含if语句。

答案 4 :(得分:0)

Zaibis,Dauterman和Hot Licks是正确的。加:  1.我还在printf的末尾添加了换行符,&#34; \ n &#34;。  2.此外,这个宏将使你的生活更轻松:

#define strEQ(a,b) (0 == strcmp((a),(b)))

...
if(strEQ(x, arrayNames[i]) {
    printf("Hello %s, your orientation is: %s\n", x, arrayOrient[namesRand]);
    break;
} else {
    printf("Invalid name!\n");
}

这是一个非常奇怪的程序,让用户猜出一个名字但不选择他们的性取向!他们怎么知道这三个名字中的哪一个是可以接受的呢?

此外,您还有潜在的错误:
          arrayOrient [namesRand]
因为使用另一个数组arrayNames的长度而不是arrayOrient的长度来选择数字namesRand。