簡體   English   中英

從文本文件中讀取 char 和 int - C

[英]Reading char and int from text file - C

我有一個包含 20 行文本(數字和名稱)的文本文件。 我想從文本文件中讀取這些,然后將它們用作 function 中的參數。

我的文本文件包含大約 20 行,如下所示:

719 Chris 

我有以下代碼,但它不起作用,並給出了EXC_BAD_ACCESS (code=1, address=0x68)

void read() {
    int number;
    char name;
    char buffer[200];
    FILE *fp = fopen("text.txt", "r");

    while (fgets(buffer, sizeof(buffer), fp)) {
        printf("%d %s\n", &number, name);
        add(name, number)
    }
    fclose(fp);
}

您沒有檢查文件是否已成功打開。 如果fopen返回NULL並且該值存儲在fp中,則 function 調用fgets(buffer, sizeof(buffer), fp)將調用未定義的行為(即您的程序可能會崩潰)。

另外,線

printf("%d %s\n", &number, name);

將調用未定義的行為,原因有二:

  1. %d轉換格式說明符要求您傳遞類型為int的參數,但您傳遞的是類型為int*的參數。

  2. %s轉換格式說明符要求您傳遞類型為char *的參數,但您傳遞的是類型為char的參數。

傳遞name也沒有意義,因為它從未被賦值。 您可能想用buffer做一些事情,因為它包含您剛剛使用fgets讀取的行。

我的猜測是您想使用 function sscanf而不是printf ,如下所示:

sscanf( buffer, "%d %s", &number, name);

但是,在那種情況下,您必須將name更改為一個數組,以便它可以存儲多個字符,而不是只能存儲一個字符。

這是完整的代碼,它修復了上述所有問題:

void read()
{
    int number;
    char name[200];
    char buffer[200];

    FILE *fp = fopen( "text.txt", "r" );
    if ( fp == NULL )
    {
        fprintf( stderr, "Error opening file!\n" );
        exit( EXIT_FAILURE );
    }

    while ( fgets( buffer, sizeof buffer, fp ) != NULL )
    {
        if ( sscanf( buffer, "%d %s", &number, name ) != 2 )
        {
            fprintf( stderr, "Parsing error!\n" );
            exit( EXIT_FAILURE );
        }

        add( name, number );
    }

    fclose(fp);
}

請注意,您必須#include <stdlib.h>才能使用 function exit

我看到有幾點對我來說很奇怪:

  1. add() function 是做什么的,為什么最后沒有分號? (比如add(name, number);

  2. 你應該添加一個fclose(fp); 關閉 stream。

  3. 在您的printf()中,您使用標志%s打印一個字符,除了%s打印一個字符串,替換為%c

  4. 您嘗試通過&number打印數字的地址,除了它是%p標志而不是%d標志。

  5. 至少在printf()的第一次傳遞時, numbername看起來是空的(並且未初始化!)。

暫無
暫無

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

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