我是编程菜鸟所以请耐心等待。
我正在尝试将文本文件中的数字读入数组。文本文件“somenumbers.txt”只包含16个数字,如“5623125698541159”。
#include <stdio.h>
main()
{
FILE *myFile;
myFile = fopen("somenumbers.txt", "r");
//read file into array
int numberArray[16];
int i;
for (i = 0; i < 16; i++)
{
fscanf(myFile, "%d", &numberArray[i]);
}
for (i = 0; i < 16; i++)
{
printf("Number is: %d\n\n", numberArray[i]);
}
}
该程序不起作用。它编译但输出:
号码是:-104204697
数字是:0
号码是:4200704
号码是:2686672
号码是:2686728
号码是:2686916
编号是:2004716757
号码是:1321049414
数字是:-2
编号是:2004619618
编号是:2004966340
号码是:4200704
号码是:2686868
号码是:4200798
号码是:4200704
号码是:8727656
进程返回20(0x14)执行时间:0.118秒 按任意键继续。
答案 0 :(得分:27)
更改为
fscanf(myFile, "%1d", &numberArray[i]);
答案 1 :(得分:12)
5623125698541159
被视为单个数字(在大多数架构上超出int
的范围)。您需要在文件中写下数字
5 6 2 3 1 2 5 6 9 8 5 4 1 1 5 9
代表16个号码。
如果您的文件有输入
5,6,2,3,1,2,5,6,9,8,5,4,1,1,5,9
然后将%d
中的fscanf
说明符更改为%d,
。
fscanf(myFile, "%d,", &numberArray[i] );
经过一些修改,以下是完整的代码:
#include <stdio.h>
#include <stdlib.h>
int main(){
FILE *myFile;
myFile = fopen("somenumbers.txt", "r");
//read file into array
int numberArray[16];
int i;
if (myFile == NULL){
printf("Error Reading File\n");
exit (0);
}
for (i = 0; i < 16; i++){
fscanf(myFile, "%d,", &numberArray[i] );
}
for (i = 0; i < 16; i++){
printf("Number is: %d\n\n", numberArray[i]);
}
fclose(myFile);
return 0;
}
答案 2 :(得分:3)
for (i = 0; i < 16; i++)
{
fscanf(myFile, "%d", &numberArray[i]);
}
这是尝试将整个字符串"5623125698541159"
读入&numArray[0]
。您需要在数字之间留出空格:
5 6 2 3 ...
答案 3 :(得分:2)
使用%c循环以逐字符而不是%d读取流。
答案 4 :(得分:1)
您的代码中存在两个问题:
scanf
转换不会考虑溢出(盲目地为每个连续的数字字符应用%d
)您获得的第一个值(*10 + newdigit
)等于-104204697
modulo 5623125698541159
;因此它是溢出的结果(如果2^32
,其中64位宽,不会发生溢出)。接下来的值是未初始化的(来自堆栈的垃圾),因而无法预测。
您需要的代码可能是(类似于上面BLUEPIXY的答案,插图如何检查int
的返回值,成功匹配的项目数):
scanf
答案 5 :(得分:-1)
像这样输入您的文件输入 前任: 12 13 22 45 (在每个数字按回车后) 然后运行你的程序它会正常运行