c程序交换打印错误结果的值

c程序交换打印错误结果的值,c,function,integer,parameter-passing,C,Function,Integer,Parameter Passing,您好,我写了一个c程序,读取2个值,然后交换它们并打印新值,但第二个值显示为0。例如,如果为“a”输入10,为“b”输入8,则a将为8,但b将为0。有人知道解决这个问题的方法吗?代码如下: #include <stdio.h> int getData() { int a, b; printf("Enter first number: "); scanf("%d", &a); printf("Enter second number: ");

您好,我写了一个c程序,读取2个值,然后交换它们并打印新值,但第二个值显示为0。例如,如果为“a”输入10,为“b”输入8,则a将为8,但b将为0。有人知道解决这个问题的方法吗?代码如下:

#include <stdio.h>

int getData()
{
    int a, b;

    printf("Enter first number: ");
    scanf("%d", &a);

    printf("Enter second number: ");
    scanf("%d", &b);

    return(a, b);
}

void swapValues(int a, int b)
{

    printf("The value of a is: %d", b);
    printf("\nThe value of b is: %d", a);

    return;
}

int main()
{

    int a, b = getData();
    swapValues(a, b);

    return(0);
}
#包括
int getData()
{
INTA,b;
printf(“输入第一个数字:”);
scanf(“%d”和“&a”);
printf(“输入第二个数字:”);
scanf(“%d”和“b”);
报税表(a、b);
}
无效交换值(整数a、整数b)
{
printf(“a的值为:%d”,b);
printf(“\n b的值为:%d”,a);
返回;
}
int main()
{
int a,b=getData();
SwapValue(a,b);
返回(0);
}

不能从C函数返回多个值。我甚至不知道为什么语句
return(a,b)
会编译

如果您想从一个函数返回多个值,您应该将它们放入数组或结构中。我将使用一个结构来演示一种正确执行此操作的方法。有很多方法可以做到这一点,但是这个方法对代码的修改最少

struct TwoNums{
    int a;
    int b;
};

TwoNums getData()
{
    /* This creates a new struct of type struct TwoNums */
    struct TwoNums nums;

    printf("Enter first number: ");
    scanf("%d", &(nums.a));

    printf("Enter second number: ");
    scanf("%d", &(nums.b));

    return(a, b);
}

void swapValues(int a, int b)
{

    printf("The value of a is: %d", b);
    printf("\nThe value of b is: %d", a);

    return;
}

int main()
{
    /* Get the whole structure in one call */
    struct TwoNums nums = getData();

    /* Call the swap function using fields of the structure */
    swapValues(nums.a, nums.b);

    return 0;
}

首先,在C中不能返回多个值。解决方法是返回一个结构或传递值地址

void getData(int *a,int* b)
{
   //int a, b;

   printf("Enter first number: ");
   scanf("%d", a); // look here you passed the address of a to scanf
                    // by doing that scanf can write to a 

   printf("Enter second number: ");
   scanf("%d", b);

   //return(a, b);
  }
旧干线:

  int main()
  {

    int a, b = getData(); // b gets the return value from getData()
                          // but a is still uninitialized
    //to call the new function you have to do the following
    int a,b;
    getData(&a,&b);
    swapValues(a, b);

    return(0);
    }

不使用临时变量。 所以试试这个代码

#include <stdio.h>

int swape()
   {
  int a,b;
  printf("Enter first number: ");
  scanf("%d", &a);


printf("Enter second number: ");
scanf("%d", &b);
a=a+b;
b=a-b;
a=a-b;


printf("The value of a is: %d", a);
printf("\nThe value of b is: %d", b);

}

int main()
{

swape();

return(0);
}
#包括
int swap()
{
INTA,b;
printf(“输入第一个数字:”);
scanf(“%d”和“&a”);
printf(“输入第二个数字:”);
scanf(“%d”和“b”);
a=a+b;
b=a-b;
a=a-b;
printf(“a的值为:%d”,a);
printf(“\n b的值为:%d”,b);
}
int main()
{
拭子();
返回(0);
}
不做你们认为它能做的事,这是一种误用

表达式
op1,op2
计算
op1
op2
的值,但给出
op2
的值。因此,它没有传回几个值(尽管像Python这样的一些语言可以做这类事情)

同样地

int a, b = getData();
不会获取从
getData()
返回的虚构的两个值。相反,它将
a
设置为不确定值,并根据函数返回的单个值设置
b

我会看到这样的东西:

#include <stdio.h>

int getData (char *which) {
    int val;

    printf ("Enter value for %s: ", which);
    scanf("%d", &val);

    return val;
}

void swapValues (int a, int b) {
    printf("The swapped value of a is: %d\n", b);
    printf("The swapped value of b is: %d\n", a);
}

int main (void) {
    int a = getData ("a");
    int b = getData ("b");
    swapValues(a, b);

    return 0;
}
void swapValues (int *pa, int *pb) {
    int tmp = *pa;
    *pa = *pb;
    *pb = tmp;
}
:
swapValues (&a, &b);
// a and b are now swapped.

你不必要地把整个事情复杂化了。首先,像return(a,b)这样的东西在C中是荒谬的。此外,如果你想交换,为什么你要把b作为printf()的参数传递给printf()来打印“a”,并把a传递给printf()的“b”?无论如何,这里有一个修改过的代码,它保持了简单,并且完成了任务

#include <stdio.h>

void swapValues()
{
    int a, b,tem;

    printf("Enter first number: ");
    scanf("%d", &a);

    printf("\nEnter second number: ");
    scanf("%d", &b);

    tem=a;
    a=b;
    b=tem;

    printf("\nThe value of a is: %d", a);
    printf("\nThe value of b is: %d", b);

        }



int main()
{

    swapValues();

    return(0);
}
#包括
void swapvalue()
{
INTA、b、tem;
printf(“输入第一个数字:”);
scanf(“%d”和“&a”);
printf(“\n输入第二个数字:”);
scanf(“%d”和“b”);
tem=a;
a=b;
b=透射电镜;
printf(“\n a的值为:%d”,a);
printf(“\n b的值为:%d”,b);
}
int main()
{
swapvalue();
返回(0);
}
第一个:

getData()
函数写入错误。 不能从C中的函数返回多个参数。因此,您可以分离数据读取,或使用如下指针:

void getData(int* a, int* b) {

    printf("Enter first number: ");
    scanf("%d", a);

    printf("Enter second number: ");
    scanf("%d", b);
}
main()中

第二点:

交换值(int a,int b)
不交换数据

更正确的是:

void swapValues(int* a, int* b) {
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

我还没有学会数组或结构,我可以用指针来解决这个问题吗?-1,你的代码列出了10个错误/警告<代码>返回(a、b)这是错误的。@Armin这不应该是全部。我只实现了需要替换的函数。现在,ARMIN应该建立。仍然不会建立,但是你确实消除了一个错误,注意这是代码> C <代码>。我们在讨论C++编译吗?很明显,海报是C的新版,也许是一般的编程。也许可以解释为什么
返回(a,b)
在C中是荒谬的。谢谢,它实际上让我笑了,我曾经看到它是多么的复杂yours@user2147550能够嘲笑自己的错误是一个人能拥有的最大财富之一-1在询问之前,您是否尝试过使用调试器?它已编译,这就是为什么它会混淆我,如果它编译,并不意味着它工作正常。从技术上讲,代码中没有编译错误。但从功能的角度来看,它根本不起作用。使用调试器可以了解出了什么问题。
int a, b;
getData(&a, &b);
void swapValues(int* a, int* b) {
    int tmp = *a;
    *a = *b;
    *b = tmp;
}