2016-09-11 5 views
1

Cで%[^\n]は何を意味しますか? 文字列変数に複数の単語を入力するためにscanfを使用するプログラムで見ました。私はscanfが複数の単語を取ることができないことを知ったので、私は理解しません。Cでは%[^ n]は何を意味しますか?

#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    char line[100]; 
    scanf("%[^\n]",line); 
    printf("Hello,World\n"); 
    printf("%s",line); 
    return 0; 
} 
+0

['scanf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/scanf.html)のドキュメントで_scan set_と呼ばれています など –

+2

'scanf("%[^ \ n] "、行);の一般的な問題' 1)入力を制限しないので、100文字以上の入力テキストが 'line []'バッファをオーバーフローさせることがあります。 2)見つかった_first_文字が ''\ n' 'の場合、_nothing_は' line [] 'について変更され、関数は0を返します。3)' \ n'は 'stdin'のままです。 'scanf("%[^ \ n] "、行);' fgets() 'を調査して使用しないでください。 – chux

+0

あなたの知識を共有してくれてありがとう:) @chux –

答えて

4

[^\n]は正規表現の一種です。

  • [...]:それはスキャンセット...によって与えられる文字の組)から文字の空でないシーケンスと一致します。
  • ^は、スキャナーセットが「無効化」されていることを示します。これは、の補数によって与えられます。
  • ^\n:スキャンセットは、\nを除くすべての文字です。

さらにfscanf(およびscanf)は、フォーマットに一致する入力文字の最長シーケンスを読み取ります。

したがっては、\n(またはEOF)になるまですべての文字を読み取り、sに入れます。 Cで全体の行を読むのは普通のイディオムです。

§7.21.6.2 The fscanf functionも参照してください。入力するまで

+0

ありがとう:)。それは本当に便利です:) –

+0

もう1つのことは、他の文字を使用する場合は、\ nそれ以外の文字は同じですか? –

+0

@サルマンサディ:あなたは 'scanf(" [^ a] "、s);'のようなものを意味しますか?文字列全体を文字「a」まで読む。 – md5

1
scanf("%[^\n]",line); 

意味:\nまでスキャンまたはキーを入力してください。ここ

はコードがあります。

0
scanf("%[^\n]",line); 

は、ユーザーの入力を読み込みます押されるか、改行文字が追加されます(\n)とラインという名前の変数に格納します。

+0

ところで、あなたはscanf()のドキュメントを読むべきです –

関連する問題