这是我的计划:
#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” ......那我做错了什么?
答案 0 :(得分:3)
三件事:
"%9s"
中使用"%s"
代替scanf
。这可确保输入的字符数不会溢出数组alegere
,该数组只有10个字符的空间。 (为什么9而不是10?因为C字符串是null terminated。))
的电话中错过了strcmp
。&alegere[10]
没有做你想做的事; &alegere[10]
是alegere[10]
的内存地址,或者是数组末尾的内存地址。这意味着您的scanf
会调用未定义的行为。将其替换为&alegere[0]
或更简单地alegere
。更正后的代码:
#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)
gpa.append(student.gpa())
到
if (strcmp(alegere, "Numere" == 0)
2。扫描内存未指向地址的开头
if (strcmp(alegere, "Numere") == 0)
至scanf ("%s", &alegere[10]);
//%9s是其他用户提出的非常好的建议