为什么这个字符串比较不起作用? C
Why is this string comparison not working? C
我正在尝试比较用户输入是否与文本文件中的输入相同。在 printf("U = %s, R = %s.", uAts, rline);
行我得到 a = a,但它仍然转到 else 语句。也许还有其他一些我不知道的比较 C 语言字符串的方法?
void nextQ(int klL, FILE *kl, FILE *ats, FILE *atsR){
int i, uAts[500], at;
char kline[500], aline[500], rline[500], b[1];
system("cls");
for (i = 0; i <= klL; i++){
fgets(kline, 500, kl);
fgets(aline, 500, ats);
fgets(rline, 500, atsR);
}
printf("%s\n", kline);
printf("%s\n\n", aline);
printf(rline);
printf("Jusu atsakymas: ");
scanf("%s", &uAts);
printf("U = %s, R = %s.", uAts, rline);
if(uAts == rline){
printf("Klausimas atsakytas teisingai!\n");
printf("Noredami pereiti prie kito klausimo iveskite bet koki simboli ");
scanf("%s", b);
nextQ(klL+1, kl, ats, atsR);
}else{
printf("Neteisingai\n");
}
}
int main(int argc, char *argv[]) {
int pas, klL = 0;
char term;
bool menu = true;
//textiniu failu nuskaitimas
FILE *kl;
kl = fopen("Klausimai.txt", "r");
FILE *ats;
ats = fopen("Atsakymai.txt", "r");
FILE *laim;
laim = fopen("Laimejimas.txt", "r");
FILE *atsR;
atsR = fopen("AtsR.txt", "r");
do{
//menu
printf("1. Pradeti zaidima.\n");
printf("2. Iseiti\n");
printf("Jusu pasirinkimas: ");
scanf("%d%c", &pas, &term);
if(pas < 1 || pas > 2 || term != '\n'){
printf("\nBloga ivestis");
break;
}else{
nextQ(klL, kl, ats, atsR);
}
}while(menu);
return 0;
}
除了评论中提到的问题:你不能这样比较字符串:
if(uAts == rline)
这将比较 char 数组的 地址 ,它们总是不同的。使用
if( strcmp( uAts, rline ) == 0 )
相反。 strcmp()
将比较两个以 NUL 结尾的字符数组(在 C 中又名 "strings")的 内容 。
我正在尝试比较用户输入是否与文本文件中的输入相同。在 printf("U = %s, R = %s.", uAts, rline);
行我得到 a = a,但它仍然转到 else 语句。也许还有其他一些我不知道的比较 C 语言字符串的方法?
void nextQ(int klL, FILE *kl, FILE *ats, FILE *atsR){
int i, uAts[500], at;
char kline[500], aline[500], rline[500], b[1];
system("cls");
for (i = 0; i <= klL; i++){
fgets(kline, 500, kl);
fgets(aline, 500, ats);
fgets(rline, 500, atsR);
}
printf("%s\n", kline);
printf("%s\n\n", aline);
printf(rline);
printf("Jusu atsakymas: ");
scanf("%s", &uAts);
printf("U = %s, R = %s.", uAts, rline);
if(uAts == rline){
printf("Klausimas atsakytas teisingai!\n");
printf("Noredami pereiti prie kito klausimo iveskite bet koki simboli ");
scanf("%s", b);
nextQ(klL+1, kl, ats, atsR);
}else{
printf("Neteisingai\n");
}
}
int main(int argc, char *argv[]) {
int pas, klL = 0;
char term;
bool menu = true;
//textiniu failu nuskaitimas
FILE *kl;
kl = fopen("Klausimai.txt", "r");
FILE *ats;
ats = fopen("Atsakymai.txt", "r");
FILE *laim;
laim = fopen("Laimejimas.txt", "r");
FILE *atsR;
atsR = fopen("AtsR.txt", "r");
do{
//menu
printf("1. Pradeti zaidima.\n");
printf("2. Iseiti\n");
printf("Jusu pasirinkimas: ");
scanf("%d%c", &pas, &term);
if(pas < 1 || pas > 2 || term != '\n'){
printf("\nBloga ivestis");
break;
}else{
nextQ(klL, kl, ats, atsR);
}
}while(menu);
return 0;
}
除了评论中提到的问题:你不能这样比较字符串:
if(uAts == rline)
这将比较 char 数组的 地址 ,它们总是不同的。使用
if( strcmp( uAts, rline ) == 0 )
相反。 strcmp()
将比较两个以 NUL 结尾的字符数组(在 C 中又名 "strings")的 内容 。