[英]retrieving a string with spaces from a file in C
我們獲得了一項任務,其中涉及從文件中獲取信息並將數據存儲在數組中。 文件中的數據排序如下
New York 40 43 N 74 01 W
前20個字符是城市名稱,后跟緯度和經度。 緯度和經度應該很容易
fscanf(infile, "%d(
或%c
取決於我要獲得哪一個)", pointer)
操作,因此不會有問題。
我的問題是我不知道如何收集城市名稱的字符串,因為某些城市名稱包含空格。 我讀了一些關於使用定界符的內容,但是從我讀到的內容來看,似乎更多用於讀取整行。 有什么方法可以從文件中讀取城市名稱,並將整個名稱中的空格存儲在字符數組中? 謝謝。
這是一個提示:使用空格作為唯一的定界符,您如何告訴fscanf()
城市名稱從哪里開始和緯度從哪里開始? 您正在接近“似乎更多用於讀取整行”的內容。 可以使用fgets()
探索。
G'day,
當您一直掃描到第一個數字(即城市名稱的緯度)時,是否可能會掃描第一個項目的非數字?
如果城市名稱中有空格,則需要使用定界符或將城市名稱字段定義為固定長度。 否則,嘗試解析三個單詞的城市名稱,例如“ Salt Lake City”,將會殺死下一個字段。
提示:讀取內存中的整行內容,然后以前20個字符作為城市名稱,然后以10個字符作為緯度,依此類推。
您可以為%c
指定大小,它將收集指定大小的字符塊。 在您的情況下,如果城市名稱長為20個字符,請將%20c
放在scanf
的行格式內。
然后,您必須將終止符放在末尾並修剪字符串。
來自“ man fgets”:
char * fgets(char * s,int size,FILE * stream);
fgets()最多從流中讀取小於大小的字符,並將它們存儲到s所指向的緩沖區中。 在EOF或換行符之后停止讀取。 如果讀取換行符,則將其存儲到緩沖區中。 緩沖區的最后一個字符之后將存儲一個'\\ 0'。
如果成功,則fgets()返回s,如果未讀取任何字符,則fgets()將返回NULL,如果錯誤或文件結束時返回NULL。
這意味着您需要一個由21個字符組成的char數組來存儲20個字符的字符串(第21個字符將在末尾為“ \\ 0”定界符,而fgets會自動將其放入)。
祝好運!
scanf()
可以使用"%c"
說明符來接受有限數量的字符。
注意不會添加終止的空字節。
char cityname[21];
scanf("%20c%d%d %c%d%d %c", cityname,
&lat1, &lat2, &lat_letter,
&lon1, &lon2, &lon_letter);
cityname[20] = 0;
但是,最好使用fgets()
並“手動”解析字符串。 否則,您將遇到END-OF-LINE問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.