C言語で空白を含む文字列をスキャンする
-
scanf
でRegEx
を使用して、C でスペースを含むユーザー入力を取得する -
C でスペースを含むユーザー入力を取得するには
scanf
で%[^\n]s
を使用する -
C で
scanf
で%[^\n]%*c
を使用してスペースを含むユーザー入力を取得する -
scanf
でgets()
を使用して、C でスペースを含むユーザー入力を取得する
この記事では、C プログラミング言語のファイル記述子について説明します。
ユーザーからの入力を収集するとき、ほとんどの場合、scanf()
はスペース、バックスラッシュ、タブなどを無視します。 ただし、スキャンセット指定子を使用することで、この制限を回避できます。 scanset 指定子は、%[]
という表記で表されます。
これらの角括弧で表現することにより、達成したいことに応じて、文字または文字列を記述できます。
C プログラミング言語には、スペースを含めたままユーザーからの入力を取得するために使用できるいくつかの異なる方法が用意されています。 それを実装するためのいくつかの例を見てみましょう。
scanf
で RegEx
を使用して、C でスペースを含むユーザー入力を取得する
この %[]
は scanset 指定子であり、0-9、a-z、スペース
および A-Z
を使用すると、これらの文字のみを入力として使用できることを意味します。 それ以外は使用できません。
s
は、コンピューターが文字列を入力として受け入れることを示します。
ソースコード:
#include <stdio.h>
int main(int argc, char const *argv[]) {
char name[20];
printf("Please enter your full name: ");
scanf("%[0-9a-zA-Z ]s", name);
printf("\nYour name is: %s", name);
return 0;
}
出力:
Please enter your full name: Saad Aslam
Your name is: Saad Aslam
C でスペースを含むユーザー入力を取得するにはscanf
で%[^\n]s
を使用する
このインスタンスのスキャンセット文字は [].
です。 ^\n
文字は、新しい行が見つかるまでユーザー入力を読み続けるようオペレーティング システムに指示します。
この場合、2つの文字が同一でない限り true を返す XOR 演算子を利用しました。 文字が改行 \n
であると判断された後、文字列が読み取られると、XOR 演算子 ^
は false を返します。
したがって、%s
ではなく %[n]s
と書きます。 したがって、スペースを含む入力行を取得するには、次を使用できます。
scanf("%[n]s", str);
ソースコード:
#include <stdio.h>
int main() {
char str[100];
printf("Please enter your full name: ");
scanf("%[^\n]s", str);
printf("\nYour name is: %s", str);
return 0;
}
出力:
Please enter your full name: Saad Aslam
Your name is: Saad Aslam
C でscanf
で %[^\n]%*c
を使用してスペースを含むユーザー入力を取得する
この場合、scanset 文字は [].
です。 ^\n
文字は、新しい行が見つかるまで入力を受け取り続けるようオペレーティング システムに指示します。
次に、%*c
を使用して改行文字を読み取り、ここで使用されている *
は、この改行文字が出力から除外されることを示します。
ソースコード:
#include <stdio.h>
int main() {
char str[20];
printf("Please enter something: ");
scanf("%[^\n]%*c", str);
printf("\nYou entered: %s", str);
return 0;
}
出力:
Please enter something: Writer at Delft Stack
You entered: Writer at Delft Stack
scanf
で gets()
を使用して、C でスペースを含むユーザー入力を取得する
C ライブラリに含まれる char *gets(char *str)
関数は、標準入力 (stdin
) から 1 行を読み取り、str
によって参照される文字列に保存します。 状況に応じて、改行文字が読み取られたとき、またはファイルの終わりに達したときのどちらか早い方で停止します。
ソースコード:
#include <stdio.h>
int main() {
char str[50];
printf("Please enter your name: ");
gets(str);
printf("\nYour name is: %s", str);
return (0);
}
出力:
Please enter your name: Saad Aslam
Your name is: Saad Aslam
I am Waqar having 5+ years of software engineering experience. I have been in the industry as a javascript web and mobile developer for 3 years working with multiple frameworks such as nodejs, react js, react native, Ionic, and angular js. After which I Switched to flutter mobile development. I have 2 years of experience building android and ios apps with flutter. For the backend, I have experience with rest APIs, Aws, and firebase. I have also written articles related to problem-solving and best practices in C, C++, Javascript, C#, and power shell.
LinkedIn