C 编程 : Using function to return size of array

标签 c arrays pass-by-reference

<分区>

我一直在尝试在 C 中创建一个函数,该函数读取 double 值,然后将其存储到数组中。我希望能够返回数组的大小,以便我可以在 main 中使用它。所以这个函数的目的是要求用户将值输入到数组中并键入 ^d (ctrl+d) 或 EOF 以结束循环。

#include <stdio.h>

//Prototype Declaration
int getdata(double[], int); 

int main(int argc, char* argv[]) { 
 double array[20]; 
 int count = 0, max = 20;

 //Calls the getdata function
 count = getdata(array, max); 
 printf("%s%lf%s","Array1: " ,array[1], "\n");  
 printf("%s%d%s", "Count is: ", count, "\n");
 return 0;
}

-----(我正在链接模块,所以它们在不同的文件中)--------

#include <stdio.h>

//Define getdata.c
int getdata(double values[], int limit){
 printf("%s","Please enter your values into the array.\n");
 int count = 0;
 double n;
 while ((count < limit) && (scanf("%lf",&n) != EOF)) {
  values[count] = n; 
  count++;
 } 
 return count; 
}

但是,如果我提前中断循环,数组值会正常传递,但计数只会打印出 20。我假设程序会自动用一些东西填充其余的空索引,并且在我输入 EOF 后继续增加计数值。我该怎么做才能使程序正确获取输入的值的数量?我用 C 编写的代码不多。我主要用 C++ 完成我的工作。我熟悉通过引用传递但使用 C。

最佳答案

您需要注意 scanf() 不会吞下无法转换的输入。如果有问题,那么它会将(错误的)输入留在流中,以便您在循环的下一次迭代中无法转换。所以它反复尝试匹配相同的无效事物作为 double 。

我建议使用 fgets() 加上 sscanf() 作为比使用 scanf() 或(至少)检查更好的解决方案scanf() 的返回值,以确保您读取了预期的字段数(在本例中为 1)。我敢打赌它会返回 0 而不是 EOF,因此您的循环将继续,直到 count 匹配 limit

关于C 编程 : Using function to return size of array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36120020/

相关文章:

arrays - swift TableView

ios - 使用按钮创建/追加数组

python - 当变量引用同一个对象时,它是如何调用的,为什么python有这个特性?

对 C 中的 "pass by reference"以及何时使用 & 或 * 感到困惑

c++ - 在 C++ 中查找所需的库头文件是否有常见的做法?

c++ - 更好地解释 C++ 指针函数?

java - jmeter jsonpath 数组长度的表达式

c++ - 函数参数字符串按引用传递

c++ - 在 C/C++ 中不可能否定 -2147483648?

c - 在c中打破二维指针数组的一行,我做错了什么?