gpt4 book ai didi

从主函数调用时 C 函数返回不同的值

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

我编写了一个从文件中读取值的程序。文件中的数据采用以下格式。

    100       Full Name       SomeDetails.

234 Full Name SomeDetails

以下是我写的程序。

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define MAX 10
struct student
{
int rollno;
char name[20];
char course[25];
};

int main()
{
FILE *fptr;
fptr=fopen("records.txt","r");
struct student s[10];
int i=0,tstudent=0;
char che;
char line[100];

//SECTION : 1.1 -> READING NUMBER OF LINES

while(!feof(fptr))
{
che=fgetc(fptr);
if(che=='\n')
{
tstudent++;
}
}

printf("Total Lines in File = %d\n",tstudent);
fclose(fptr);


//SECTION : 1.2 -> READING RECORDS FROM FILE

fptr=fopen("records.txt","r");
char newString[20][20];
int ii,j,ctr;
j=0;
ctr=0;
for(i=0; i<tstudent; i++)
{

fgets(line,100,fptr);
printf("Value of Line %d = %s",i,line);
for(ii=0; ii<=(strlen(line)); ii++)
{
// if tab or NULL found, assign NULL into newString[ctr]
if(line[ii]=='\t'||line[ii]=='\0')
{
newString[ctr][j]='\0';
ctr++; //for next word
j=0; //for next word, init index to 0
}
else
{
newString[ctr][j]=line[ii];
j++;
}
}

}

for(ii=0; ii < ctr; ii++)
{
printf("\n%s",newString[ii]);
}

printf("Value of ctr = %d",ctr);
fclose(fptr);
}

上面的代码工作正常,但是所有代码都在主函数中,但是我想创建一个可以从主文件调用的单独函数,并将二维或一维数组中的文件的每个数据作为返回值返回给我.

如有任何帮助/建议,我们将不胜感激。

我尝试将 CODE 作为一个单独的函数来执行......不工作。

 #include <stdio.h>
#include <stdlib.h>
#include<string.h>

char readfile(int tstudent,FILE* filename)
{

//FUNCTION TO READ RECORDS FROM FILE.

FILE *fptr;
int i,k;
char line[100];
char newString[20][20];
int j=0,ctr=0;
fptr=fopen("records.txt","r");
for(i=0; i<tstudent; i++)
{
fgets(line,100,fptr);
printf("Value of Line %d = %s",i,line);
for(k=0; k<=(strlen(line)); k++)
{
// if tab or NULL found, assign NULL into newString[ctr]
if(line[k]=='\t'||line[k]=='\0')
{
newString[ctr][j]='\0';
ctr++; //for next word
j=0; //for next word, init index to 0
}
else
{
newString[ctr][j]=line[k];
j++;
}
}
}
return newString;
}

我在 main 函数中定义了一个新变量 char results[].. 并尝试按如下方式调用该函数

 results[]=readfile(tstudent,fptr)

但是当试图读取结果时..它显示垃圾

最佳答案

char readfile(int tstudent,FILE* filename)
...
char newString[20][20];
...
return newString;

这不是什么好事,对吧?您定义 readFile 以返回一个字符(不是指针,只是一个字节),然后返回一个数组。我们不应该对编译器的提示感到惊讶。

如果您“修复”了重新定义返回类型的问题,您仍然会遇到问题,因为 newString 是一个自动局部变量。它定义的存储(内存)在函数外是未定义的。

函数在 C 中填充结构(或数组)的最简单方法是调用者将其作为函数参数传递。所以你会得到更像的东西:

int readfile( FILE* input, char newString[][20], int tstudent )

其中 newString 的定义方式与您的定义方式相同,但是由调用者定义的,而不是在 readfile 中。比照。 stdio 功能类似于 fgets;他们中的大多数要求调用者定义他们读入的缓冲区。

我再指出几个错误。

无论何时调用函数——尤其是 I/O 函数——检查错误。您可能想阅读 tstudent 记录,但有多少记录呢?如果你要求 5 并且只找到 1,那怎么办?您的读取循环必须测试文件结尾,并且 readfile 必须返回读取的记录数,否则调用者永远不会知道。与 fread(3) 的工作原理进行比较。那些 Unix 的家伙对如何定义函数略知一二!

现在你的函数看起来像这样:

int readfile( FILE* input, char newString[][20], int tstudent ) {
char line[100], *s;
int i=0;

for( ; i < tstudent && (s = fgets(line, sizeof(line), input)) != NULL; i++ ) {
/* do stuff with line */
}
/* check for EOF/error if s is NULL, and report */
return i;
}

关于从主函数调用时 C 函数返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54135397/

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