我試圖接受來自文件的輸入。該文件的格式爲整數,後跟一個製表符,後跟一個字符串(可能有也可能沒有空格)。用Ints和字符串接受帶空格的輸入C
例如:
1\tls -l
2\tls
我試着使用:
int cmd_num;
char command[80];
while (fscanf(ifp, "%d\t%s", &cmd_num, command) != EOF) {
...
}
但是這並沒有當它看到了一個空間。任何幫助?
感謝
我試圖接受來自文件的輸入。該文件的格式爲整數,後跟一個製表符,後跟一個字符串(可能有也可能沒有空格)。用Ints和字符串接受帶空格的輸入C
例如:
1\tls -l
2\tls
我試着使用:
int cmd_num;
char command[80];
while (fscanf(ifp, "%d\t%s", &cmd_num, command) != EOF) {
...
}
但是這並沒有當它看到了一個空間。任何幫助?
感謝
您可能需要使用掃描設置讀取字符串:
if (fscanf(fp, "%d\t%79[^\n]\n", &cmd_num, command) != 2)
...error handling...
else
...use cmd_num and command...
注意大小限制在格式字符串來防止緩衝區溢出。
請注意,您不知道換行符是否匹配。使用fgets()
來讀取整行(或getline()
),然後使用sscanf()
代替fscanf()
;至少你會知道是否收集了換行符(如果需要的話可以吞併換行符)。
在fscanf函數試試這個:
fscanf(fp,"%d\t%[^\n]s",&cmd_num,command);
這必將努力......
你不需要掃描設置's'。請注意,它實際上並不會造成問題,但那只是因爲它是在格式字符串的最後一次轉換之後發生的,並且您無法檢測到何時存在不匹配。 –
我不明白,當它看見一個space_是讀1 \ _this失敗tls –
這適用於沒有任何字符串有空格的情況。但是,當一個字符串有一個空格時,它會進入無限循環。 – user1742385
你能發佈失敗的文件輸入嗎? –