簡體   English   中英

統計 C 中的文本文件數量時發生數據丟失

[英]Data loss occurred while counting the number of text files in C

我嘗試制作 function 以從文本文件中獲取數字並計算不重疊且超過特定數字的數字。 我要把它放在鏈表中。 計算一個與創建鏈表不重疊的數字是一件好事,但是計算超過某個數字的數字就有問題了。 它比原來的數字少。 在 Excel 中,有一些數字應該出來,但在我制作的 C 程序 function 的情況下,它們小於那個數字。

void GetData(headNode* rheadnode)
{
    int dataType;
    int newData;
    FILE* fp = NULL;
    fp = fopen("input.txt", "r");
    if (fp != NULL) {

        while (fscanf(fp, "%d", &newData) != EOF)
        {
            dataType = InsertNode(rheadnode, newData);

            if (newData > 5000)
                Data_morethan5000_Count++;

            switch (dataType)
            {
            case 0:
                break;
            case 1:
                NodeCount++;
            }
        }
        fclose(fp);
    }
}

上面的代碼是整個程序代碼的一部分。 我正在使用一種方法從input.txt文件中獲取一個數字,將其放入newData變量中,如果超過5000則增加Data_morethan5000_Count的值。所以結果應該是45460。但是,C程序輸出了一個結果值 45432。我想知道數據丟失發生在哪里。 以下是整個代碼。

#include<stdio.h>
#include<stdlib.h>

typedef struct Node {
    int key;
    struct Node* link;
} listNode;

typedef struct Head {
    struct Node* head;
}headNode;


int NodeCount = 0;
int Data_morethan5000_Count = 0;

headNode* initialize(headNode* rheadnode);
int DeleteList(headNode* rheadnode);
void GetData(headNode* rheadnode);
int InsertNode(headNode* rheadnode, int key);
void PrintResult(headNode* rheadnode);

int main()
{
    int key;
    headNode* headnode = NULL;

    headnode = initialize(headnode);
    GetData(headnode);
    PrintResult(headnode);

    DeleteList(headnode);

    return 0;
}

headNode* initialize(headNode* rheadnode) {
    headNode* temp = (headNode*)malloc(sizeof(headNode));
    temp->head = NULL;
    return temp;
}

int DeleteList(headNode* rheadnode) {
    listNode* p = rheadnode->head;

    listNode* prev = NULL;
    while (p != NULL) {
        prev = p;
        p = p->link;
        free(prev);
    }
    free(rheadnode);
    return 0;
}


void GetData(headNode* rheadnode)
{
    int dataType;
    int newData;
    FILE* fp = NULL;
    fp = fopen("input.txt", "r");
    if (fp != NULL) {

        while (fscanf(fp, "%d", &newData) != EOF)
        {
            dataType = InsertNode(rheadnode, newData);

            if (newData > 5000)
                Data_morethan5000_Count++;

            switch (dataType)
            {
            case 0:
                break;
            case 1:
                NodeCount++;
            }
        }
        fclose(fp);
    }
}

int InsertNode(headNode* rheadnode, int key) {

    listNode* search, * previous;
    listNode* node = (listNode*)malloc(sizeof(listNode));

    node->key = key;

    search = rheadnode->head;
    previous = NULL;
    while (search != NULL)
    {
        if (node->key < search->key)
        {
            previous = search;
            search = search->link;
        }
        else if (node->key == search->key)
            return 0;
        else
            break;
    }
    if (previous == NULL)
    {
        node->link = rheadnode->head;
        rheadnode->head = node;
    }
    else
    {
        node->link = search;
        previous->link = node;
    }
        return 1;
}

void PrintResult(headNode* rheadnode) {
    /*
    The total number of nodes: 10011
    More than 5000 values: 45460
    Execution time: 1.234567 sec
    */
    printf("The total number of nodes: %d\n", NodeCount);
    printf("More than 5000 values: %d\n", Data_morethan5000_Count);
    printf("Execution time:  sec");
}

關於:我想知道數據丟失發生在哪里。

沒有數據丟失。 相反,有一些重復的數據(鍵)值。

當有重復時,節點數不增加。

暫無
暫無

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

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