C 學習(五) string使用注意事項(一)

2021-07-24 05:21:20 字數 1011 閱讀 1589

今天程式設計遇到乙個問題,從txt讀555 111 9999,然後顯示出來,結果開始程式一直只顯示555;之後經過網頁搜尋終於找到了問題所在;

在使用getline()時,我們需要明白其原理:

getline (char* s, streamsize n, char delim );

第乙個引數是儲存的位置,第二個是讀取的最大字元數,第三個引數是終結符,預設為'\n',你可以自行設定

你的程式裡,預設使用'\n'為終結符,才導致每次讀取一行的問題,根據你的輸入格式,你可以用空格作為終結符,這樣可以只輸入一行即可。

如果,你仍然使用'\n'作為終結符(預設),而且只輸入一行,你理解的是444後面沒有讀到,是不對的。其實是在讀取555後,輸入流input錯誤了。針對第乙個getline(buf,4);預設終結符'\n',輸入是555 111 9999,在讀第四個字元時,判斷是否是'\n',若是則結束,若不是則輸入流發生錯誤,這是你輸入過多導致。

解決方式是:在之後加上input.clear();清空輸入流狀態。

部分**如下:

int  a, ex, num;

char buf[35];

input.getline(buf, 25);

mylist[i].setname(buf);

input.getline(buf, 30);

mylist[i].setaddress(buf);

input.getline(buf, 4);

a = atoi(buf);

input.clear();

input.getline(buf, 5);

ex = atoi(buf);

input.clear();

input.getline(buf, 7);

num = atoi(buf);

input.clear();

mylist[i].setphone(a, ex, num);

cout.setf(ios::left);

String的splic方法使用的注意事項

今天在專案中遇到了乙個平時不注意的問題,測的時候發現的,string value canonical 00000000000000000000000000000028 canonical 0 0 yes no yes yes string arr value.split 我本以為得到的arr陣列長度...

c 中關於string的特性介紹以及注意事項

前言 string型別在我們實際專案開發中是乙個最使用的型別,string是乙個引用型別這一點大家都知道,但是在實際使用過程中,大家會發現string和我們常見的引用型別使用還真不一樣,看下面的乙個簡單例子 static void main string args hello 對hello進行加工 ...

c 中關於string的特性介紹以及注意事項

前言 string型別在我們實際專案開發中是乙個最使用的型別,string是乙個引用型別這一點大家都知道,但是在實際使用過程中,大家會發現string和我們常見的引用型別使用還真不一樣,看下面的乙個簡單例子 static void main string args hello 對hello進行加工 ...