我是C编程的初学者。
我写了一个程序由于其“OR”而无法正常运行。功能。这是一个有效的代码片段:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* englishTest = 'yup';
if ( (englishTest == 'yup') || (englishTest == 'yep') || (englishTest == 'yas') || (englishTest == 'yah') )
{
printf("You may pass \n");
}
else
{
printf("You shall not pass \n");
}
return 0;
}
答案 0 :(得分:2)
这应该是C
,而不是脚本语言。
此代码中存在两个问题:
char englishTest = 'yup';
englishTest
声明为char
,其中C
是整数类型。它只能容纳一个字符,但您尝试在其中存储三个字符。
你的意思是:
char englishTest[] = "yup";
请注意表示array (of chars)的方括号。可以在括号之间选择指定数组大小。此处未指定,编译器使用可以保存用于initialization("yup"
)的字符串的最小值。此最小值为4
:3
中有"yup"
个字符,但C
strings以the NULL
character ('\0'
)终止。
代码中的第二个问题是字符串的比较。字符串不是C
中的基本类型。它们是字符数组。使用comparison operators直接比较两个字符串不会产生您期望的结果。它比较了存储两个字符串的内存中的地址,而不是它们的字符。
C
标准库提供了几个比较两个字符串的函数。最直截了当的string comparison function是strcmp()
。如果两个字符串相同则返回0
,如果第一个字符串位于dictionary order中的第二个字符串之前,则返回负值,否则返回负值。
您的比较代码应该是(注意C
字符串用双引号""
括起来):
if (strcmp(englishTest, "yup") == 0 || strcmp(englishTest, "yep") == 0 ||
strcmp(englishTest, "yas") == 0 || strcmp(englishTest, "yah") == 0)
附: OR运算符(||
)不会破坏任何内容。