2012-11-02 36 views
0

我試圖接受來自文件的輸入。該文件的格式爲整數,後跟一個製表符,後跟一個字符串(可能有也可能沒有空格)。用Ints和字符串接受帶空格的輸入C

例如:

1\tls -l 
2\tls 

我試着使用:

int cmd_num; 
char command[80]; 

while (fscanf(ifp, "%d\t%s", &cmd_num, command) != EOF) { 
... 
} 

但是這並沒有當它看到了一個空間。任何幫助?

感謝

+0

我不明白,當它看見一個space_是讀1 \ _this失敗tls –

+0

這適用於沒有任何字符串有空格的情況。但是,當一個字符串有一個空格時,它會進入無限循環。 – user1742385

+0

你能發佈失敗的文件輸入嗎? –

回答

1

您可能需要使用掃描設置讀取字符串:

if (fscanf(fp, "%d\t%79[^\n]\n", &cmd_num, command) != 2) 
    ...error handling... 
else 
    ...use cmd_num and command... 

注意大小限制在格式字符串來防止緩衝區溢出。

請注意,您不知道換行符是否匹配。使用fgets()來讀取整行(或getline()),然後使用sscanf()代替fscanf();至少你會知道是否收集了換行符(如果需要的話可以吞併換行符)。

0

在fscanf函數試試這個:

fscanf(fp,"%d\t%[^\n]s",&cmd_num,command);

這必將努力......

+0

你不需要掃描設置's'。請注意,它實際上並不會造成問題,但那只是因爲它是在格式字符串的最後一次轉換之後發生的,並且您無法檢測到何時存在不匹配。 –