簡體   English   中英

將數字從文本文件讀入C中的數組

[英]Reading numbers from a text file into an array in C

我是一個編程新手,所以請多包涵。

我正在嘗試將數字從文本文件讀入數組。 文本文件“ 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 s按任意鍵繼續。

改成

fscanf(myFile, "%1d", &numberArray[i]);

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 

然后將fscanf %d說明符更改為%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;
}
for (i = 0; i < 16; i++)
{
    fscanf(myFile, "%d", &numberArray[i]);
}

這試圖將整個字符串"5623125698541159"讀入&numArray[0] 您需要在數字之間添加空格:

5 6 2 3 ...

與%c循環以逐個字符而不是%d讀取流字符。

您的代碼中有兩個問題:

  • 必須檢查scanf的返回值
  • %d轉換不考慮溢出(對於每個連續的數字字符,盲目應用*10 + newdigit

您獲得的第一個值( -104204697 )等於56231256985411592^32 ; 因此,它是溢出的結果(如果int是64位寬,則不會發生溢出)。 下一個值是未初始化的(來自堆棧的垃圾),因此是不可預測的。

您需要的代碼可能是(類似於上面的BLUEPIXY的答案,並帶有說明如何檢查scanf的返回值(成功匹配的項目數)的插圖):

#include <stdio.h>

int main(int argc, char *argv[]) {
    int i, j;
    short unsigned digitArray[16];
    i = 0;
    while (
        i != sizeof(digitArray) / sizeof(digitArray[0])
     && 1 == scanf("%1hu", digitArray + i)
    ) {
        i++;
    }
    for (j = 0; j != i; j++) {
        printf("%hu\n", digitArray[j]);
    }
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM