簡體   English   中英

從C中的文件檢索帶空格的字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM