为什么不将以下IF语句评估为true,即使sex [i]的值为M char?
for (i=0;i<3;i++)
if (sex[i] == 'M' || sex[i] == 'm')
我正在尝试做的是创建一个字符数组,其中包含字符串或字符的多个值。在这种情况下,它是一个字符,它在if函数之外工作,如果我打印性[0]我得到M。
哦,我知道变量需要像这样声明
char sex[size][sizeofstring]
整个代码:
#include <stdio.h>
int main() {
char name[10][256], sex[10][256];
int i;
for (i=0;i<3;i++) {
printf ("Insert the name of the person %d and her gender, M for male F for female\n", i+1);
scanf("%s", name[i]);
scanf(" %c", sex[i]);
}
for (i=0;i<3;i++)
if (*sex[i] == 'M' || *sex[i] == 'm')
printf ("\n%s", name[i]);
for (i=0;i<3;i++)
if (sex[i] == 'F' || sex[i] == 'f')
printf ("\n%s", name[i]);
}
答案 0 :(得分:1)
这是长版:
char arr[size_1][size_2]
表示我想存储stringS(复数)。
arr[i]
表示我想访问第i个字符串
arr[i][j]
表示我想访问第i个字符串的第j个字符。
试试这个:
char sex[2][30] = {
{"My name is this"},
{"Your name is this"}};
printf("I'm a single character: %c\n", sex[0][5]);
printf("I'm a string, group of characters: %s\n", sex[0]);
答案 1 :(得分:0)
鉴于声明
char sex[size][sizeofstring];
使用
if (sex[i] == 'M' || sex[i] == 'm')
不起作用,因为它成为指针比较操作。它相当于:
char* p = sex[i];
void* p1 = 78; // Assuming ASCII encoding.
// 'M' is an int. The int is converted to a pointer.
void* p2 = 102; // Again, assuming ASCII encoding
if ( p == p1 || p == p2 )
这解释了为什么if
语句中的条件永远不会计算为真。
<强>解决方案强>
您应该使用:
if ( strcmp(sex[i], "M") == 0 || strcmp(sex[i], "m") == 0)
如果您的编译器支持非标准的不区分大小写的字符串比较函数stricmp
,则可以将这两个测试结合起来。
if ( stricmp(sex[i], "M") == 0 )