一个比较C

时间:2016-12-21 16:53:41

标签: c compare

这是我的计划:

#include <stdio.h>
#include <string.h>

int main(){
    char alegere[10];
    int a;
    printf ("Alege natura matricei tale: (Numere/Caractere)");
    scanf ("%s", &alegere[10]);
    if (strcmp(alegere, "Numere") == 0){
        printf("a");
    } else 
        printf ("b");
    return 0;
}

它应该将我从键盘上写的字符串与字符串“Numere”进行比较,但如果我将字符串“Numere”或任何其他字符串设置为结果将相同,我将打印“b” ......那我做错了什么?

2 个答案:

答案 0 :(得分:3)

三件事:

  1. 根据评论中的建议,您应在"%9s"中使用"%s"代替scanf。这可确保输入的字符数不会溢出数组alegere,该数组只有10个字符的空间。 (为什么9而不是10?因为C字符串是null terminated。)
  2. 您在)的电话中错过了strcmp
  3. &alegere[10]没有做你想做的事; &alegere[10]alegere[10]的内存地址,或者是数组末尾的内存地址。这意味着您的scanf会调用未定义的行为。将其替换为&alegere[0]或更简单地alegere
  4. 更正后的代码:

    #include <stdio.h>
    #include <string.h>
    
    int main(){
        char alegere[10];
        printf ("Alege natura matricei tale: (Numere/Caractere)");
        scanf ("%9s", alegere);
        if (strcmp(alegere, "Numere") == 0){
            printf("a");
        } else
            printf ("b");
        return 0;
    }
    

答案 1 :(得分:3)

  1. 大括号问题改变了这个
  2.   

    gpa.append(student.gpa())

    if (strcmp(alegere, "Numere" == 0)

    2。扫描内存未指向地址的开头

      

    if (strcmp(alegere, "Numere") == 0)   至   scanf ("%s", &alegere[10]); //%9s是其他用户提出的非常好的建议