我面對一段代碼,我不明白:如何控制fileno的輸出?
read(fileno(stdin),&i,1);
switch(i)
{
case '\n':
printf("\a");
break;
....
我知道fileno
返回與sdtin
這裏,然後read
在i
變量把這個值相關聯的文件描述符。
那麼,stdin
允許i
與第一個「case」匹配的值應該是多少,即\n
?
謝謝
我面對一段代碼,我不明白:如何控制fileno的輸出?
read(fileno(stdin),&i,1);
switch(i)
{
case '\n':
printf("\a");
break;
....
我知道fileno
返回與sdtin
這裏,然後read
在i
變量把這個值相關聯的文件描述符。
那麼,stdin
允許i
與第一個「case」匹配的值應該是多少,即\n
?
謝謝
我知道
fileno
返回這裏的sdtin
關聯的文件描述符,
是的,儘管我懷疑你不知道那是什麼意思。
然後
read
把這個值放在i
變量中。
號無無無無無。 read()
不把文件描述符的值,或任何部分,在提供的緩衝區(在你的情況下,i
字節)。正如它的名字所暗示的,read()
嘗試從閱讀作爲第一個參數傳遞的文件描述符表示的文件。讀取的字節(如果有)存儲在提供的緩衝區中。
stdin
代表程序的標準輸入。如果您從交互式shell運行該程序,那將對應於您的鍵盤。該程序嘗試讀取用戶輸入,並將其與換行符進行比較。
該程序可能存在缺陷,也可能是完全錯誤的,儘管從所提供的片段中無法分辨出來。如果i
是類型爲int
的變量,那麼它的表示形式大於一個字節,但您只讀取一個字節。這將只替換表示的一個字節,結果取決於C實現和數據讀取。
什麼程序似乎是試圖做可以由具有read()
工作,但我會建議使用getchar()
代替:
#include <stdio.h>
/*
...
int i;
...
*/
i = getchar();
/* ... */
但應該是什麼標準輸入的值,以配合第一「的情況下」,即\ n嗎?
case語句不會查看stdin的「值」。
read(fileno(stdin),&i,1);
讀取單個字節到i
(假設read()
調用成功),如果該字節是\n
(換行符),那麼它會匹配的情況。您可能需要閱讀read(2)
的手冊頁以瞭解其功能。
你知道'read'的功能是什麼?將所示代碼中的'read'調用看作是從'stdin'中執行無緩衝的'getchar'或'getc'或'fgetc'的簡單方法。那麼你的問題是否有意義? 'getchar'而不是'read'? –
對不起,我剛剛更新了我的文章 – HolyGraal
'i'的類型必須是'char'(或'signed char'或'unsigned char'),輸入中未讀的下一個字節必須是換行符。 –