为什么这个字符串比较不起作用? 13 C

时间:2016-06-07 16:32:40

标签: c string comparison

我试图比较用户输入是否与文本文件相同。在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;
}

1 个答案:

答案 0 :(得分:3)

除了评论中提到的问题:你无法比较这样的字符串:

if(uAts == rline) 

将比较char数组的地址,这些将始终不同。使用

if( strcmp( uAts, rline ) == 0 )

代替。 strcmp()将比较两个NUL终止的char数组的内容(在C中也称为“字符串”)。