Code Bye

运行错误

下面代码运行输出不是本人想要的结果而是‘%@@’ 这个是什么意思?
#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;
}

10

printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方,而且通常编译还不出错。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

10

printf(“你喜欢的颜色是%s\n”,&colorName);
改成
printf(“你喜欢的颜色是%s\n”,colorName);
%s 需要char*类型指针,colorName本身已经是指针了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明运行错误