gpt4 book ai didi

c - 将文本中的数据获取到数组中

转载 作者:行者123 更新时间:2023-11-30 14:24:58 24 4
gpt4 key购买 nike

我有作业,从文本文件中获取电话号码,并将其放入数组中......这是我写的,虽然它什么也没写......循环是,只要 .txt 文件中有文本,就将其读入数组...

void get_phones(int *phones)
{
FILE *fp;
fp = fopen("phones.txt", "rt");
if (fp == NULL)
{
printf ("Error\n");
}
else
{
while (fscanf(fp, "%d\n", &phones) > 0)
{
fscanf(fp, "%d\n", &phones);
}
}
}

最佳答案

最新更新:
用于测试:
请将以下代码放入您的main()中,并将数字 10 更改为文件中的行数。要自动计算上限,您可以尝试更改 get_phones 的返回类型至int并在 while 循环中放置一个计数器。

int i=0;
for(i=0;i<10;i++){
printf("%lld\n",*(phones+i));
}

您需要引用指针才能打印实际值。否则,您将打印存储在指针中的地址。phones ,除了是数组的名称之外,它本质上是指向数组中第一个元素的指针。有关指针和数组的更多信息,请参阅 this tutorial .

假设您使用的是 32 位计算机
我在文本文件中输入的电话号码如下:
22121222345
678139199
111111111

请注意,22,121,222,345>=2,147,483,647,这是 int 可以表示的最大数字。 (对于 unsigned int 是 2^32-1)。现在,如果我们尝试运行以下代码:

void get_phones(int *phones){
FILE *fp;
fp = fopen("phones.txt", "rt");

if (fp == NULL)
printf ("Error\n");
else
while (fscanf(fp, "%d\n", phones++) !=EOF){}

}

终端打印的号码列表为:
646385865
678139199
111111111

数组中保存的第一个数字是完全随机的!为什么?因为它对于整数来说太大并且会溢出。

现在,如果我们尝试以下版本:

void get_phones(long long* phones){
FILE *fp;
fp = fopen("phones.txt", "rt");
if (fp == NULL)
printf ("Error\n");
else
while (fscanf(fp, "%lld\n", phones++) !=EOF){}

}


终端打印的号码列表为:
22121222345
678139199
111111111

为什么它有效?因为类型long long最多可存储 2^63-1 = 9,223,372,036,854,775,807

已测试工作版本。将数据类型更改为long long如果你愿意的话。

!!您的代码的问题是您将错误的内容传递给 fscanfphones已经是一个指针——它指向数组的起始点。当你写phone++时,它将当前指针传递给 fscanf,并将指针加一,这会将指针移动到整数数组中的下一个槽。

另外,虽然fscanf将返回它扫描的项目数,在您的 while 循环条件下,扫描已经执行。因此您不需要在 while 循环体中第二次调用它

5195551234 这个数字对于 unsigned long 来说仍然太大, 很遗憾。因为对于32位机器来说,intunsigned long最大值为 $2^{32}-1$。查看wikipedia如果您需要更多这方面的信息。相反,您需要 long long如果您在 32 位机器上运行代码,否则它将溢出并存储不正确的数据。

关于c - 将文本中的数据获取到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903496/

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