gpt4 book ai didi

调用将整数存储在 C 数组中的函数

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:03 25 4
gpt4 key购买 nike

我有一项家庭作业需要帮助。

我编写了一个函数,它应该使用 scanf 获取用户输入并将其存储到一个数组中。它还将计算输入整数的次数(0 除外,它会终止程序)我在 main() 中调用此函数时特别遇到问题关于如何修复它有什么建议吗?

我试过在底部定义函数,并在函数中使用不同的变量:getVals

#include <stdio.h>

#define ARRAYSIZE 20 //defines the size of the array to 20

int nVals = 0;
int getVals(int myVals[], int maxVals);
int input[ARRAYSIZE+1] = {'0'};

int getVals(int myVals[], int maxVals)
{
for (maxVals = 0; maxVals < ARRAYSIZE; maxVals++) { //When the row is less than ten, it will run the loop and increment the row
printf("Please Enter up to 20 integers "); //which will allow the name to be stored in the next row
scanf("%d", &myVals[maxVals]);

if ((myVals[maxVals] <= 0) || (maxVals == ARRAYSIZE -1))
return nVals;
if (myVals[maxVals] > 0)
nVals++;

}
}

int main() {
printf("This program will receive up to 20 inputs from you, and sort them from least to greatest\n\n");
printf("Enter 0 or a negative number to exit the program.\n");

getVals(int ARRAYSIZE, int input[ARRAYSIZE]);

printf("You have entered %d numbers\n", nVals);
printf("%d", input[]);
printf("\n");
printf("Now sorting....\n");

return 0;
}

最佳答案

你应该找到一个教程。它们充满了代码示例,您可以在不确定时控制其中完成的事情的简单程度。

首先是错误。

函数声明 只是声明函数及其参数。你正确使用它。您可以在同一个程序中对同一个函数有多个声明,前提是所有声明都一致。

函数定义 包含函数的代码。一个程序中的每个函数应该只包含一个定义。顺便说一句,定义也是声明

函数调用是使用函数的地方。它不再是声明,函数的声明在调用之前必须是可见的。您必须传递与声明一致的现有变量。

这里你应该有:

int input[ARRAYSIZE];          // declare an int array
getVals(input, ARRAYSIZE); // call the function

这一行 printf("%d", input[]); 也是错误的。数组在 C 语言中不是一等公民,一次只能打印(或读取)一个元素。至少你应该写 printf("%d", input); (它是一个调用而不是声明,所以它需要实际参数而不是正式参数)。但是数组会衰减为指向其第一个元素的指针(直到那里都很好),指针将被转换为一个 int 值(数组第一个元素的地址)并且您将打印该值。不是你想要的:-(

但还有其他可能的改进。

nVal 是一个全局值。除非您有充分的设计理由,否则应避免使用全局变量。最佳实践建议改为将参数传递给函数。所以你应该删除 gloval int nVals = 0getVals 更改为:

int getVals(int myVals[], int maxVals)
{
int nVals;
for (nVals = 0; nVals < maxVals; nVals++) { //When the row is less than ten, it will run the loop and increment the row
printf("Please Enter up to 20 integers "); //which will allow the name to be stored in the next row
if (1 != scanf("%d", &myVals[nVals])) { // ALWAYS test scanf return value
printf("Incorrect input");
break;
}
if (myVals[nVals] <= 0) {
break;
}
}
return nVals;
}

并从 main 调用它:

int nVals = getVals(input, ARRAYSIZE);

关于调用将整数存储在 C 数组中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56334630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com