[英]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);
將調用未定義的行為,原因有二:
%d
轉換格式說明符要求您傳遞類型為int
的參數,但您傳遞的是類型為int*
的參數。
%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
。
我看到有幾點對我來說很奇怪:
add()
function 是做什么的,為什么最后沒有分號? (比如add(name, number);
)
你應該添加一個fclose(fp);
關閉 stream。
在您的printf()
中,您使用標志%s
打印一個字符,除了%s
打印一個字符串,替換為%c
。
您嘗試通過&number
打印數字的地址,除了它是%p
標志而不是%d
標志。
至少在printf()
的第一次傳遞時, number
和name
看起來是空的(並且未初始化!)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.