Getline整行讀入

常常寫C程式的時候會因為輸入時的換行字元,或輸入的串流之中還有剩於的資料搞的頭昏腦帳的,所以我們自己來設計一個專門處理這樣問題的函式解決問題。

※ 預先了解觀念

* fp, stdin 資料串流的運作
* fgets 單行讀入的運作

※ 達到目的

* 讀入大小剛好的資料到buffer中
* 去除掉buffer中由fgets自動加上的'\n'換行字元
* 串流中的資料看是否要讓下次讀取而保留或是清除

※ 程式運作

1. 先透過fgets將資料由所設定的串流中讀取寫入到buffer之中
2. 看buffer之後是否有'\n',若是有的話表示串流之中已完全讀完資料
3. 若是沒有的話表示串流之中還有剩餘的資料,判斷ignore是否要保留
4. 若為不保留,則將串流的資料全部清除

Example:

char* getline(char* buf, int num, FILE* fp, bool ignore)
{
char* find = NULL;
if (!fgets(buf, num, fp))
{
return NULL;
}
if ((find = strrchr(buf, '\n')))
{
*find = '\0';
}
else if (ignore)
{
char ch;
while ((ch = fgetc(fp)) != EOF && ch != '\n');
}
return buf;
}

int main()
{
char buf1[11] = {0};
char buf2[21] = {0};
getline(buf1, sizeof(buf1), stdin, true);
getline(buf2, sizeof(buf2), stdin, false);
puts(buf1);
puts(buf2);
return 0;
}

0 意見: