交换变量并在 C 中打印出来
Swapping variables and printing them out in C
我已经编写了接受用户 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;
}
我已经调试了几个小时了。任何错误的更正?谢谢!
首先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
因为它指向一个字符串文字,根据定义,它是只读的。
您的代码的根本问题是您使用以下代码将指针隐式转换为整数:
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
。
#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;
}
我已经编写了接受用户 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;
}
我已经调试了几个小时了。任何错误的更正?谢谢!
首先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
因为它指向一个字符串文字,根据定义,它是只读的。
您的代码的根本问题是您使用以下代码将指针隐式转换为整数:
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
。
#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;
}