我编写了接受用户y / n输入的代码,但是在运行代码时,控制台只打印出随机和不一致的字符。
int main()
{
char var1 = "A";
char var2 = "$";
char user_answer;
printf("Do you wanna swap var1 and var2? y/n \n ");
scanf("%c", &user_answer);
if (user_answer == 'y')
{
var1 = "$";
var2 = "A";
printf("var1 is now: %c", &var1, "\n", "var2 is now: %c", &var2);
}
else
{
exit(0);
}
return 0;
}
我已经调试了好几个小时。出了什么问题?谢谢!
答案 0 :(得分:1)
首先char
不是字符串类型,它是一个整数 1 类型,大小为1字节,可用于存储单个字符,所以你需要改变
char var1 = "A";
至 2 ,
const char *var1 = "A";
与var2
相同,然后您使用printf()
错误,请尝试
printf("var1 is now: %s\nvar2 is now: %s\n", var1, var2);
1 原则上签字。
2 使用const
因为它指向一个字符串文字,根据定义,只读。
答案 1 :(得分:1)
您的代码的基本问题是您使用以下代码隐式地将指针转换为整数:
char var1 = "A";
char var2 = "$";
...
要初始化角色,您应该使用单引号而不是双引号。不幸的是,C编译器没有给出错误,因为它实际上将“A”解释为指向转换为int的字符的指针,因为C中的字符是整数,所以不会产生错误。
顺便说一下,你应该收到一份表格的警告(用gcc 5.3.0编译):
jdoodle.c:2:17: warning: initialization makes integer from pointer without a cast [-Wint-conversion]
char var1 = "A";
如果您只想阅读一个字符,则可能需要使用getchar
函数,而不是scanf
。
答案 2 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
int main()
{
char var1 = 'A';
char var2 = '$';
char user_answer;
printf("Do you wanna swap var1 and var2? y/n \n ");
scanf("%c", &user_answer);
if (user_answer == 'y')
{
var1 = '$';
var2 = 'A';
printf("var1 is now: %c\n",var1);
printf("var2 is now: %c\n",var2);
}
else
{
exit(0);
}
return 0;
}