交换变量并在 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);

READ THE DOCUMENTATION


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;
}