我是c编程的初学者,而且我已经到了一个点(非常荒谬),我被困在两个字符串之间的if语句中。
在这个程序中,我希望用户输入保存在结构中的学生的课程,然后它应该搜索具有相同课程的学生并将其打印在屏幕上。
我的问题出在if statement
,出于某种原因(内存地址可能?)当我输入相同的字符时,它会看到它们用于不同的字符串。
代码只是"跳过" if部分。虽然它在我声明if(record[0].lesson!="maths")
时起作用。
我尝试过很多事情,例如strcmp
,
if (record[0].lesson==record[1].lesson)
if(record[0].lesson=="maths")
......等等。
如果你能帮助我,我将非常感激。非常感谢你。
# include <stdio.h>
# include <string.h>
typedef struct student{
char name[10];
char lesson[10];
}students;
int main()
{
students record[10];
char less;
strcpy(record[0].name,"James");
strcpy(record[0].lesson,"maths");
strcpy(record[1].name,"John");
strcpy(record[1].lesson,"maths");
strcpy(record[2].name,"Harry");
strcpy(record[2].lesson,"C/C++");
printf("Give Lesson\n");
scanf("%s",less);
for(int i=0;i<3;i++){
if(less==record[i].lesson)
printf("%s\n",record[i].name);}
return 0;
}
答案 0 :(得分:1)
你想要这个:
less
正确声明为char less[10];
strcmp
进行字符串比较而不是==
#include <stdio.h>
#include <string.h>
typedef struct student{
char name[10];
char lesson[10];
} students;
int main()
{
students record[10];
char less[10];
strcpy(record[0].name, "James");
strcpy(record[0].lesson, "maths");
strcpy(record[1].name, "John");
strcpy(record[1].lesson, "maths");
strcpy(record[2].name, "Harry");
strcpy(record[2].lesson, "C/C++");
printf("Give Lesson\n");
scanf("%s", less);
for (int i = 0; i < 3; i++) {
if (strcmp(less, record[i].lesson) == 0)
printf("%s\n",record[i].name);
}
return 0;
}
仍有很大的改进空间。