我是C新手,我不知道问题出在哪里。我正在制作一些程序,我希望在a1的情况下改变字符串a1的值并显示消息(我知道我可以组织字符,我稍后会这样做)。我收到两个错误,第一个是:
[错误]案例标签不会减少为整数常量 - 第96行
和第二
[错误]分配到类型' char [60]'时不兼容的类型从类型 ' char *' - 第96行
代码:
#include <stdio.h>
char a1[60];
switch(trenutni)
case a1: printf("A1 je %s",a1="Brazil");
}
else
printf("Nemate vise poteza, vise srece drugi put!/nBroj bodova koje ste osvojili:%");
答案 0 :(得分:2)
该行
case a1:
因为
而无法编译 a1
是一个变量,在“编译时”不知道该值。
a1
是char[]
,C
案例标签必须是在编译时已知的表达式,即常量或常量表达式。在您的情况下,您必须将switch
转换为if
:
if(strcmp(trenutni, a1) == 0) ...
答案 1 :(得分:1)
您遇到的问题与数据类型不匹配有关。
<强>第一强>,
switch(trenutni)
case a1:
a1指的是声明的变量,它是一个数组,交换机不支持。你的C程序期望一个整数或字符而不是数组,如下所示:
switch ( trenutni )
case 'a': printf...
从您的代码中猜测,您似乎希望用户能够在控制台中输入“a1”,在这种情况下,如果您想要更长时间地测试值,您可以重构使用if-train而不是一个字符:
if ( strcmp( trenutni, "a1" ) == 0 )
<强>第二强>,
a1="Brazil"
是另一种类型不匹配。作业必须属于同一类型; char []和char *的类型不同;您可以在错误消息中看到。请参阅这个关于the differences between char* and char[]的答案。
这是代码的潜在重构,带有一些注释(当然,这是基于你想要完成的猜测):
#include <stdio.h>
char trenutni[3];
char *a1;
int main() {
printf("Unesite polje koje zelite da otvorite!");
fflush(stdout);
fgets(trenutni, 3, stdin); // read in a string
if ( strcmp(trenutni, "a1") == 0 ) { // compare string against "a1"
a1 = "Brazil";
printf("A1 je %s", a1); // keep the assignment and the output on separate lines
}
}
答案 2 :(得分:0)
该行
printf("A1 je %s",a1="Brazil");
相当虚伪。不要将printf和asignment结合起来(这本身就是假的)。我想你想要明白:
printf("A1 je %s", a1);
因为a1
是char[]
,您可以像这样设置一个新值:
strcpy(a1, "Brazil");