更改字符串值

时间:2015-04-20 19:44:25

标签: c

我是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:%");   

3 个答案:

答案 0 :(得分:2)

该行

case a1:

因为

而无法编译
  1. a1是一个变量,在“编译时”不知道该值。

  2. a1char[]C

  3. 案例标签必须是在编译时已知的表达式,即常量或常量表达式。在您的情况下,您必须将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);

因为a1char[],您可以像这样设置一个新值:

strcpy(a1, "Brazil");