【发布时间】:2018-11-29 22:33:54
【问题描述】:
所以我必须编写一个程序,提示用户输入文件名,使用指向在 main 中创建的数组的指针,然后打开它。在一个单独的函数中,我必须将用户定义的字符串带到在 main 打开的文件中,并根据它在循环中读取的字符串数返回文件中的行数,并将该值返回给调用者。
所以对于我的第一个功能,这就是我所拥有的。
void getFileName(char* array1[MAX_WIDTH])
{
FILE* data;
char userIn[MAX_WIDTH];
printf("Enter filename: ");
fgets(userIn, MAX_WIDTH, stdin);
userIn[strlen(userIn) - 1] = 0;
data = fopen(userIn, "r");
fclose(data);
return;
}
对于我的第二个功能,我有这个。
int getLineCount(FILE* data, int max)
{
int i = 0;
char *array1[MAX_WIDTH];
if(data != NULL)
{
while(fgets(*array1, MAX_WIDTH, data) != NULL)
{
i+=1;
}
}
printf("%d", i);
return i;
}
我主要有这个。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_WIDTH 144
void getFileName(char* array1[MAX_WIDTH]);
int getLineCount(FILE* data, int max);
int main(void)
{
char *array1[MAX_WIDTH];
FILE* data = fopen(*array1, "r");
int max;
getFileName(array1);
getLineCount(data, max);
return 0;
}
我的文本文件是这个。
larry snedden 123 mocking bird lane
sponge bob 321 bikini bottom beach
mary fleece 978 pasture road
hairy whodunit 456 get out of here now lane
我的问题是,每次我运行这个程序时,我都会得到一个 0 作为回报,我认为这不是我应该得到的回报。另外,在我的第二个函数中,我不知道为什么我需要 int max 但我的老师发送我需要它,所以如果有人能解释一下,那就太好了。我真的不知道我做错了什么。我会很感激我能得到的任何帮助。
【问题讨论】:
-
以
char* array1[MAX_WIDTH]开头——不是指向数组的指针;这是一个指针数组(长度未知;MAX_WIDTH被忽略)。没关系;无论如何,该参数都未使用。如果该函数的目的是返回用户选择的文件名,那么参数应该是指向缓冲区的指针(char *)和缓冲区大小,both 由调用者提供。函数本身应返回指示成功或失败的状态,调用者应根据该状态采取相应的行动。 -
@WhozCraig MAX_WIDTH 不会被忽略。
char * array1[MAX_WIDTH]创建一个 char 指针数组,该数组中的元素个数为 MAX_WIDTH -
@WilliamPursell 这是一个函数参数。因此,阵列上级维度丢失。该声明相当于
char **array1。还是您在谈论main。我指的是getFileName的论点。 -
啊,不,我指的是main第一行的变量定义。在该行中,不会忽略 MAX_WIDTH。在函数声明中,它是。差别不大。
-
@WilliamPursell 啊...好的。是的,参数的命名没有帮助。我同意。在
main中,它是一个具体的数组。当然,我应该更清楚。