2012-04-04 41 views
1

在輸入字符或直到按回車鍵或緩衝區已滿(以先發生者爲準)時,如何填充80個字符的緩衝區。C - 在輸入字符時從stdin讀取

我已經研究過很多不同的方式,但進入已被按下,然後輸入字符*得到80切斷..

感謝。

+3

看着詛咒,或者ioctl – Dave 2012-04-04 04:24:27

+0

會做謝謝。 – user884685 2012-04-04 04:26:04

+0

如何找到ioctl的頭文件 – user884685 2012-04-04 04:46:34

回答

0
#include<stdio.h> 
... 
int count=0; 
char buffer[81]; 
int ch=getchar(); 
while(count<80&&ch!='\n'&&ch!='\r'&&ch!=EOF){ 
    buffer[count]=ch; 
    count=count+1; 
    ch=getchar(); 
} 
buffer[count]='\0'; 

一旦你有buffer作爲一個字符串,請確保你消化輸入行的其餘部分,以獲得輸入流準備下次使用。

scanf("%*[^\n]"); /* Skip to the End of the Line */ 
scanf("%*1[\n]"); /* Skip One Newline */ 
+0

'getchar()'返回一個** int **,你是鵝。否則EOF將無法工作:-) – paxdiablo 2012-04-04 04:39:46

+0

** char ** - C中的類型變量是** int ** - s,但我不妨使代碼正確:) – Ariel 2012-04-04 04:41:46

+0

字符是_not_整數,它們可能是整數類型但這是無關緊要的。 getchar返回int的原因是因爲您必須能夠返回每個char _plus_一個eof指示符。 – paxdiablo 2012-04-04 04:43:37

0
#include <stdio> 
... 
char buf[80]; 
int i; 
for (i = 0; i < sizeof(buf) - 1; i++) 
{ 
    int c = getchar(); 
    if ((c == '\n') || (c == EOF)) 
    { 
     buf[i] = '\0'; 
     break; 
    } 
    buf[i] = c; 
} 
buf[sizeof(buf] - 1] = '\0'; 
+1

最後你有點問題。假設您按下的第一個鍵是ENTER,您將從循環中斷開,並將空終止符置於位置1而不是0.換句話說,字符串中將出現垃圾字符。 – paxdiablo 2012-04-04 04:46:48

+0

好點!這應該會更好一些。 – Sean 2012-04-04 04:52:14

2

如果你真的想要的人物「因爲他們都進入了」,你不能用C IO:

這可以通過下面的代碼(從this documentscanf剖面中)來完成。你必須這樣做unix的方式。 (或windows方式)

#include <stdio.h> 
#include <unistd.h> 
#include <termios.h> 
int main() { 
    char r[81]; 
    int i; 
    struct termios old,new; 
    char c; 
    tcgetattr(0,&old); 
    new = old; 
    new.c_lflag&=~ICANON; 
    tcsetattr(0,TCSANOW,&new); 
    i = 0; 
    while (read(0,&c,1) && c!='\n' && i < 80) r[i++] = c; 
    r[i] = 0; 
    tcsetattr(0,TCSANOW,&old); 
    printf("Entered <%s>\n",r); 
    return 0; 
} 
+0

謝謝,我會看到這是如何工作的.. – user884685 2012-04-08 23:57:33