交换变量并在C中打印出来

时间:2017-03-09 13:42:41

标签: c variables swap

我编写了接受用户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;
}

我已经调试了好几个小时。出了什么问题?谢谢!

3 个答案:

答案 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);

READ THE DOCUMENTATION

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