【发布时间】:2026-01-27 11:45:02
【问题描述】:
在我必须有一个生成数字的文件的项目上工作。第一行是一个生成的 int。后跟一个浮点数(单独的行)。 (我这样做是分开的,因为我觉得它更有意义,因为我必须以两种不同的方式阅读它来解决我需要的垃圾箱包装问题......就像一次阅读一种方式,另一种方式存储它在一个数组中..但想先把它弄下来) 在读取 int 后尝试读取文件以获取浮点数时出现 seg 错误。编辑:readOffline 发生错误。
int randomFunction()
{
FILE *fp;
int i;
fp = fopen("theItems.txt", "w" );
if (fp == NULL)
printf("Error: file can't be opened.\n");
srand(time(NULL) );
int random_number = rand();
printf("Random Number %d\n", random_number);
fprintf(fp,"%d",random_number);
fclose(fp);
fp = fopen("theItems.txt", "a");
int numberOfItems = rand();
printf("NumberOfItems: %d\n",numberOfItems);
for(i = 0; i < 10; i++)
{
fp = fopen("theItems.txt", "a");
float number = (float)rand()/(float)(RAND_MAX);
fprintf(fp,"%f",number);
fprintf(fp,"%s", "\n");
fclose(fp);
}
return numberOfItems;
}
void readOffline( int numberOfItems)
{
FILE *fp;
int n = 0,i;
float nu = 0.00;
fp = fopen("theItems.txt", "r");
if (fp == NULL)
printf("Error: file can't be opened.\n");
fseek(fp,SEEK_SET,0);
fscanf(fp,"%d",&n);
printf("Number read: %d\n", n);
float array[numberOfItems];
// for(i = 0; i < 3; i++)
// {
fscanf(fp,"%f",&nu);
// array[i] = nu;
// }
fclose(fp);
printf("Int:%d\n", n);
int j;
// for(j = 0; j < 3; j++)
// printf("Float Number:%f\n", array[j]);
}
int main()
{
int numberOfItems = randomFunction();
readOffline(numberOfItems);
return 0;
}
只是想了解为什么当我 // 它出来时它会导致 seg 错误,我可以让它读取我的 int 但有时它不是正确的 int 读取。但是,是的。 如果我需要更多详细信息或需要在任何地方更清楚,请告诉我
【问题讨论】:
-
float array[numberOfItems];是由int numberOfItems = rand();设置的,没有代码可以防止numberOfItems为 0 或异常大。建议numberOfItems = rand()%10 + 1; -
numberofItems有多大。如果它太大,您将达到自动数组大小的限制。 -
那行得通 chux 。谢谢!
标签: c floating-point segmentation-fault int scanf