Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用FGET从文本文件填充数组_C_File Io - Fatal编程技术网

C 使用FGET从文本文件填充数组

C 使用FGET从文本文件填充数组,c,file-io,C,File Io,我有这个类的程序,我们只需要证明我们可以从文本和二进制文件中读取、写入和填充数组。我没有很多二进制文件,但文本文件给大脑带来了很大的痛苦 我相信这一点点代码是罪魁祸首。userInputText[MAXSIZE]是一个字符数组(MAXSIZE定义为100000),当程序在此点时,textCount和textCounter都初始化为零 textPointer = fopen("textFile.txt", "r"); if (textPointer) { while (fgets(use

我有这个类的程序,我们只需要证明我们可以从文本和二进制文件中读取、写入和填充数组。我没有很多二进制文件,但文本文件给大脑带来了很大的痛苦

我相信这一点点代码是罪魁祸首。userInputText[MAXSIZE]是一个字符数组(MAXSIZE定义为100000),当程序在此点时,textCount和textCounter都初始化为零

textPointer = fopen("textFile.txt", "r");
if (textPointer) 
{
    while (fgets(userInputText, sizeof(userInputText), textPointer) != NULL)
    {
        sscanf(userInputText, "%d", &textCount);
        userInputText[textCounter] = textCount;
        textCounter += 1;
    }
}
当用户第一次运行程序时,将跳过程序的这一部分,并要求用户创建和写入文本文件。用户输入整数并将其写入文本文件,存储在userInputText中,并在程序结束时显示在屏幕上。所有这些都很好,每次程序运行时都会正确追加文本文件。我已经尝试了上面代码中我能想到的每一个组合。我尝试过使用fopen(r+),sizeof(int和MAXSIZE),并尝试使用%d。在程序后面的fprintf部分中,我将“\n”设置为delimeter,但我也尝试将其删除。我把fgets换成了fread。我已经到了一个地步,我就像一只狒狒朝这个问题扔粪便

我不想让人们认为我懒惰,并寻找一个简单的答案,也许是弱智,但不是懒惰

有什么建议吗

谢谢

Mike

尝试
while(!feof(textPointer))
{fgets(userInputText、MAXSIZE、textPointer);}


sizeof(userInputText)
只返回字符指针的大小。

运行程序时实际会发生什么?您到底想做什么?这段代码试图从
文件*
流的格式化文本输入中读取一个整数,然后出于某种奇怪的原因,您使用刚刚读取为文本的值更新用于行处理的同一文本缓冲区,但现在使用的是
int
转换结果。如果这是你的意图(我不知道怎么可能),那就这样吧,但是当我第一次运行程序的时候,你确实意识到你正在毁掉你刚刚通过每一行读取而保存的价值,对吧。它要求用户输入数字。我在while循环中扫描(%d),直到用户输入-999。当用户在循环中时,数字存储到userInputText[],下标的计数器递增。然后我使用fprintf(textPointer,“%d\n”,textTemp);将文件写入文本文件。到目前为止,数组和文本文件都很好。这是我遇到问题的下一个程序运行,因为在允许用户输入更多数字之前,我必须基于文本文件填充一个数组。@MichaelBrooks我理解。我想说的是,您不必将行读取缓冲区填充为用于累积
int
-转换的数组。写入时,将先前读取的
int
-转换值存储回行缓冲区,然后立即将该缓冲区放回
fgets()
中,您刚才存储的数据将立即被覆盖。使用不同的数组存储转换后的整数。谢谢Craig,在创建另一个数组的同时,它还必须是int数组。当我第一次开始使用这个程序时,我试图使用一个int数组,但我一直试图在只接受char数组的fgets中使用它作为参数。如果
userInputText
被声明为固定数组,我理解这是不正确的,OP特别声明它在问题中。我希望我在这里充分回答了每个人。我的说明是,创建一个整数数组来存储5000个数字的ip,并允许用户在数组中输入数字并将数字保存到文件中。当用户第二次运行代码时,我需要根据保存到文件中的数字填充一个数组。在以后的程序中,用户应该能够输入更多的数字,这些数字将接管填充数组停止的位置。代码需要从文本文件和二进制文件中写入和读取。我用一些变量(fread、fwrite等)为我的二进制文件编写了相同的代码,效果非常好。我最初发布的代码应该(在第一次运行之后)获取文件并填充数组。如果文件中有20个数字。10、20、30等。。我应该使用userInputText[20]=textCount进入程序的输入部分,然后开始添加到数组中。我会发布整个程序,但有点冗长。