輸入的C最好的辦法大家好即時通訊很新的C語言編程,我試圖從包含該信息的簡單文本文件閱讀:閱讀從這個測試文件和測試EOF
13 11 2011 13 10 00 GS452 45 20
13 11 2011 15 14 23 EI597 60 30
13 11 2011 15 34 35 EI600 20 15
當前我正在使用fscaf來讀取整行,然後將它們存儲在我的結構中的正確變量中。我在網上查了一下,似乎檢查EOF並不像看起來使用fscanf那樣直截了當,因爲它會返回讀取的「項目」數量。
用我下面的代碼和上面的文件:
1),這是閱讀,並從文件中的信息存儲在正確的位置
2)檢查EOF的最佳方式的最佳途徑所以它停止並且文件/結尾不讀取空文件。
頭文件
#ifndef MAYDAY_STRUCT_H
#define MAYDAY_STRUCT_H
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
/* unsigned because these values cannot be negative*/
unsigned int day;
unsigned int month;
unsigned int year;
unsigned int hour;
unsigned int mins;
unsigned int secs;
char ais[5];
unsigned int l_boat_time;
unsigned int heli_time;
} mayday_call;
void read_may_day_file();
#ifdef __cplusplus
}
的main.c
#include <stdio.h>
#include <stdlib.h>
#include "mayday_struct.h"
int main(int argc, char** argv) {
read_may_day_file();
return (EXIT_SUCCESS);
}
void read_may_day_file() {
char locof[30];
char eofTest;
mayday_call mday;
printf("please enter the location of the input file \n");
scanf("%s", locof);
FILE *fp;
fp = fopen(locof, "r");
if (fp) {
fscanf(fp, "%d %d %d %d %d %d %s %d %d", &mday.day, &mday.month, &mday.year, &mday.hour, &mday.mins, &mday.secs, mday.ais, &mday.l_boat_time, &mday.heli_time);
printf("reading file mayday_1.txt \n"
"day %d \n"
"month %d \n"
"yr %d \n"
"hour % d\n"
"mins %d \n"
"sec %d \n"
"ais %s \n"
"lBoattime %d\n"
"helitime %d \n", mday.day, mday.month,
mday.year, mday.hour, mday.mins, mday.secs, mday.ais, mday.l_boat_time, mday.heli_time);
fclose(fp);
}
}
我看着那個,但我不確定如何從fgets傳輸信息,因爲它將數據存儲到我的變量中。正如我所說,我對C新手,但不會將11號讀作1 1? (2個單獨的1個字符) –
@chrisedwards不是我所知...它會讀取整個行,然後你如果使用'strtok'並將分隔符設置爲一個空格(這是我所假設的每個數字之間用)然後你可以使用'atoi'或'strtol'來將該字符串轉換爲int。 – Adjit
另外,如果你正在使用'fscanf',我想我會這樣做,建立一個'while'循環來說'while(fscanf(...)!= EOF)',並且這個循環會一直保持直到沒有任何東西讀書。 – Adjit