我用K & R. 現在的功能代碼「getint()」到「C程序設計書」走出如下: - >getchar()函數是否有自己的緩衝區來存儲剩餘的輸入?
#include<stdio.h>
#define BUFSIZE 100
char buf[BUFSIZE];
int bufp = 0;
int getch(void) {
return (bufp > 0)?buf[--bufp]:getchar();
}
void ungetch(int c) {
if(bufp >= BUFSIZE)
printf("ungetch: too many characters\n");
else
buf[bufp++] = c;
}
int getint(int *pn) {
int c, sign;
while(isspace(c = getch()));
if(!isdigit(c) && c != EOF && c != '-' && c != '+') {
ungetch(c);
return 0;
}
sign = (c == '-')?-1:1;
if(c == '+' || c == '-')
c = getch();
*pn = 0;
while(isdigit(c)) {
*pn = (*pn * 10) + (c - '0');
c = getch();
}
*pn *= sign;
if(c != EOF)
ungetch(c);
return c;
}
int main(int argc, char** argv) {
int r, i;
while((r = getint(&i)) != EOF)
if(r != 0)
printf("res: %d\n", i);
return 0;
}
現在我沒有得到即使我試圖在紙上理論上運行它,但這個功能一步一步的執行。
而我輸入「23」的事實。它如何轉換爲23,我知道有邏輯將「23」轉換爲23,但c = getch()不會在輸入後將其餘的「3」存儲在緩衝區中,然後如何返回3,在轉換。 getchar()是否有自己的緩衝區,它存儲所有inout字符並將它們取1。 任何幫助都非常有用。
Getch捕獲每個輸入鍵盤並將其存儲在緩衝區中 – VIX
'getchar()'就像'getc(stdin)','stdin'是'stdio.h'中的默認'FILE *'。這些都是緩衝的。 –
我們不是一個輔導網站。也許你跳過了一些章節,或者應該讀一些其他書。 K&R期望一些基本的Unix /計算基礎知識。自18年以來,它對於C語言也是過時的。獲取一本涵蓋現代C11(至少C99)的書。代碼片段中的 – Olaf