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