Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
交换变量并在C中打印出来_C_Variables_Swap - Fatal编程技术网

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

交换变量并在C中打印出来,c,variables,swap,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')

我已经编写了接受用户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字节,可用于存储单个字符,因此您不需要更改

char var1 = "A";
to2,

var2
相同,如果使用
printf()
错误,请重试

printf("var1 is now: %s\nvar2 is now: %s\n", var1, var2);


原则上已经签字了


2使用
const
,因为它指向一个字符串文字,根据定义,它是只读的。

首先
char
不是字符串类型,它是一个整数类型,大小为1字节,可用于存储单个字符,因此您不需要更改

char var1 = "A";
to2,

var2
相同,如果使用
printf()
错误,请重试

printf("var1 is now: %s\nvar2 is now: %s\n", var1, var2);


原则上已经签字了


2使用
const
,因为它指向一个根据定义为只读的字符串文字。

代码的基本问题是,您正在使用以下代码将指针隐式转换为整数:

char var1 = "A";
char var2 = "$";
...
要初始化字符,应使用单引号而不是双引号。不幸的是,C编译器没有给您错误,因为它实际上将“A”解释为指向一个字符的指针,他将该字符转换为整数,并且由于C中的字符是整数,因此不会产生任何错误

顺便说一下,您应该已经收到了表单的警告(使用gcc 5.3.0编译):


如果只想读取单个字符,可能需要使用函数,而不是使用
scanf

代码的基本问题是,使用以下代码将指针隐式转换为整数:

char var1 = "A";
char var2 = "$";
...
#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;
}
要初始化字符,应使用单引号而不是双引号。不幸的是,C编译器没有给您错误,因为它实际上将“A”解释为指向一个字符的指针,他将该字符转换为整数,并且由于C中的字符是整数,因此不会产生任何错误

顺便说一下,您应该已经收到了表单的警告(使用gcc 5.3.0编译):

如果只想读取一个字符,可能需要使用函数,而不是
scanf

\include
#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;
}
#包括 int main() { char var1='A'; char var2='$'; 字符用户的回答; printf(“您想交换var1和var2吗?是/否\n”); scanf(“%c”和用户回答); 如果(用户回答='y') { var1='$'; var2='A'; printf(“var1现在是:%c\n”,var1); printf(“var2现在是:%c\n”,var2); } 其他的 { 出口(0); } 返回0; }
#包括
#包括
int main()
{
char var1='A';
char var2='$';
字符用户的回答;
printf(“您想交换var1和var2吗?是/否\n”);
scanf(“%c”和用户回答);
如果(用户回答='y')
{
var1='$';
var2='A';
printf(“var1现在是:%c\n”,var1);
printf(“var2现在是:%c\n”,var2);
}
其他的
{
出口(0);
}
返回0;
}

字符常量是使用单引号
'A'
而不是
“A”
编写的。你的printf也错了。您正在输入地址而不是字符。
char var1=“A”…倾听编译器警告。这不是交换两个变量的最佳方法。搜索如何交换两个变量。@StoryTeller,谢谢!这解决了我的问题!字符常量是使用单引号
'A'
而不是
“A”
编写的。你的printf也错了。您正在输入地址而不是字符。
char var1=“A”…倾听编译器警告。这不是交换两个变量的最佳方法。搜索如何交换两个变量。@StoryTeller,谢谢!这解决了我的问题!