嗨我写了一个ac程序,读入2个值然后交换它们并打印新值,除了第二个值保持显示0.例如你输入10表示'a'和8 tor'b',然后a will是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);
}
答案 0 :(得分:2)
return (a, b);
没有按照你的想法行事,这是对comma operator的误用。
表达式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;
}
您还应该记住,如果您实际想要交换变量a
和b
,并将其反映回main
(而非而不是像打印它们一样打印它们,你需要将指针传递给它们并通过指针操作它们。
C是一种按值传递的语言,这意味着对函数参数的更改通常不会反映回调用者。这将是这样的:
void swapValues (int *pa, int *pb) {
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
:
swapValues (&a, &b);
// a and b are now swapped.
答案 1 :(得分: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;
}
答案 2 :(得分: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);
}
答案 3 :(得分: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);
}
答案 4 :(得分:0)
你有一点不必要地使整个事情变得复杂。对于一个,返回(a,b)之类的东西在C中是荒谬的。此外,如果你打算交换,为什么你传递b作为printf()的参数意味着打印'a'并传递给'b'的printf()?无论如何,这是一个修改过的代码,可以保持简单并完成工作。
#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);
}
答案 5 :(得分: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, b;
getData(&a, &b);
第二个:
swapValues(int a, int b)
不会交换数据。
更正确:
void swapValues(int* a, int* b) {
int tmp = *a;
*a = *b;
*b = tmp;
}