下面代码运行输出不是本人想要的结果而是‘%@@’ 这个是什么意思?
#include<stdio.h> enum COLOR { RED,YELLOW,GREEN }; int main(int argc,char const *argv[]){ int color=-1; char *colorName=NULL; printf("输入你喜欢的颜色代码:"); scanf("%d",&color); switch(color){ case RED:colorName="red";break; case YELLOW:colorName="yellow";break; case GREEN:colorName="green";break; default :colorName="unknown";break; } printf("你喜欢的颜色是%s\n",&colorName); return 0; }
解决方案
10
printf(“你喜欢的颜色是%s\n”,&colorName);
不需要取地址
不需要取地址
5
clang的提示非常清晰
10
#include<stdio.h>
#include <string.h>
enum COLOR {RED,YELLOW,GREEN };
int main(int argc,char const *argv[])
{
int color=-1;
char colorName[10]={0};
printf(“输入你喜欢的颜色代码:”);
scanf(“%d”,&color);
switch(color)
{
case RED:strcpy(colorName,”red”);break;
case YELLOW:strcpy(colorName,”yellow”);break;
case GREEN:strcpy(colorName,”green”);break;
default :strcpy(colorName,”unknow”);break;
}
printf(“你喜欢的颜色是%s\n”,colorName);
return 0;
}
#include <string.h>
enum COLOR {RED,YELLOW,GREEN };
int main(int argc,char const *argv[])
{
int color=-1;
char colorName[10]={0};
printf(“输入你喜欢的颜色代码:”);
scanf(“%d”,&color);
switch(color)
{
case RED:strcpy(colorName,”red”);break;
case YELLOW:strcpy(colorName,”yellow”);break;
case GREEN:strcpy(colorName,”green”);break;
default :strcpy(colorName,”unknow”);break;
}
printf(“你喜欢的颜色是%s\n”,colorName);
return 0;
}
10
printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方,而且通常编译还不出错。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方,而且通常编译还不出错。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
10
printf(“你喜欢的颜色是%s\n”,&colorName);
改成
printf(“你喜欢的颜色是%s\n”,colorName);
%s 需要char*类型指针,colorName本身已经是指针了
改成
printf(“你喜欢的颜色是%s\n”,colorName);
%s 需要char*类型指针,colorName本身已经是指针了