【发布时间】:2020-10-19 10:09:05
【问题描述】:
所以我有一个文件data.txt,其中写入了随机整数,例如"17 12 5 4 16"。
所以,我使用fgets() 读取这行整数并将其存储在char str [] 中。正如所料str [0] == 17,但str [1] == 7,依此类推……整数每2位存储在数组中的一个元素中,但第二位也存储在以下元素中。
示例: str [3] = 12、str [4] = 2、str[5] = ' '。
可以做些什么来解决这个问题?
这是我非常典型的代码:
FILE* fp = fopen ("data.txt", "r");
int i = 0, j = 0;
int size = fileSize(fp) + 1; // Enumerate the char numbers in file
char str [size];
rewind (fp);
fgets (str, size, fp);
这是我的全部代码
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
typedef struct RATIONAL
{
int top;
int bottom;
} RATIONAL;
void printArray (int arr [], int count)
{
for (int i = 0; i < count; ++i)
{
printf ("%d\n", arr[i]);
}
}
int fileSize (FILE* fp)
{
char c;
int i = 0;
while ((c = getc (fp)) != EOF)
{
i++;
}
return (i);
}
int main ()
{
RATIONAL ratArray [23]; //array to hold rational numbers
int intArray [45]; //array to hold integer values
FILE* fp = fopen ("data.txt", "r");
int i = 0, j = 0;
int size = fileSize(fp) + 1; // Enumerate the char numbers in file
char str [size];
rewind (fp);
fgets (str, size, fp);
//Convert string to array of ints
while (i < size -1)
{
if (isdigit (str [i]))
{
intArray[j++] = atoi(&str[i]);
i++;
}
else
i++;
}
printArray (intArray, intArray[0]);
输入:data.txt
【问题讨论】:
-
你怎么知道每个数组元素中存储了什么?你是怎么发现的?
-
请提供minimal verifiable example。也就是说,任何人都可以完全按照所示运行以重现确切问题的最少完整代码量。
-
如果
array[0]你的意思是str[0]那么当然它只是第一个数字。您需要提取每个int而不仅仅是读取每个 ascii 字符。 -
当您edit 您的问题是为了执行第二条评论中友好地询问您的问题时,还请提供一个最小的
data.txt文件,以便重现该问题。也告诉我们array是什么,你的代码中没有这样的符号。 -
"正如预期的数组 [0] == 17," 不!
str[0]包含'1',因为它只能容纳 1 个char,不能更多。