2012-04-04 12 views
1

80文字のバッファには、入力時またはキャリッジリターンキーが押されるか、バッファがいっぱいになるまでのいずれか早い方のどちらか早い方で入力します。C - 文字としての標準入力からの読み込み

私はさまざまな方法の多くに見えたが、入力のchar *が80で切断されます、その後押しする必要があります入力しました。..

感謝。

+3

ioctl – Dave

+0

はお礼します。 – user884685

+0

ioctlのヘッダーファイルを見つけるには – user884685

答えて

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を持っていたら、あなたはその次の使用のための入力ストリームを準備するために、入力の行の残りを消化することを確認してください。 「彼らが入力されると、」あなたは本当にあなたがC IOを使用することはできません、文字が必要な場合

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

'getchar()'は** int **を返します。さもなければ、EOFは動作しません:-) – paxdiablo

+0

** Cの**型付き変数は** int ** - sですが、私は正しいコードにすることもできます:) – Ariel

+0

charsは_not_intsです。それは無関係です。 getcharがintを返す理由は、すべての単一のchar _plus_ eofインジケータを返すことができるためです。 – paxdiablo

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であるとしましょう。ループから壊れて、ヌルターミネーターを0ではなく1の位置に置きます。つまり、文字列にゴミ文字があります。 – paxdiablo

+0

良い点!これは少しうまくいくはずです。 – Sean

2

これは、次のコード(this documentscanfセクションから取られた)によって行うことができます。あなたはそれをUNIXのやり方でしなければなりません。

#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

関連する問題