C言語で単一文字の車のリターンブロックを入力する問題を解決します。


C言語のscanf()関数は、入力した文字を受信すると、前回入力したリターン記号を今回入力した文字として扱い、正確な文字データの入力ができなくなります。これは恐らく初学Cの子供靴のドアで一番頭が痛い問題です。
今日は参考までに四つの解決方法を提供します。
1、scanf()で'バックシールド記号を使用します。
scanf("%d"、&n)///フィルターを使って車に戻ります
scanf("%c"、&c);
2、scanf()のフォーマット列の一番前にスペースを追加し、車を返す文字を遮断する。
scanf("%d"、&n);
scanf("%c"、&c)//%c前にスペースを入れて、ろ過して車に戻ります。
3、文字を受け取る前に、getar()を使って車のリターン記号を読み取ります。

scanf("%d",&n);
getchar(); //               
scanf("%c",&c);
4、文字を受け取る前に、フローの中のバッファの内容をfflush()でクリアします。

scanf("%d",&n)
fflush(stdin); //           ,      #include <stdlib.h>   
scanf("%c",&c);
もうこれからはこの問題に悩まさなくてもいいです。
補足知識:C言語でscanf()を使って文字を入力する問題
1.文字列を入力する

#include<stdio.h>
int main() {
 int a;
 char s1[100];
 char s2[100];
 scanf("%d", &a);
 scanf("%s", s1);
 scanf("%s", s2);
 printf("a = %d
", a); printf("s1 = %s
", s1); printf("s2 = %s
", s2); return 0; }
入力

2019
hello
world
出力

a = 2019
s1 = hello
s2 = world
大丈夫です。scanf(「%s」)は改行符によって自動的にスキップされます。
2.入力文字

#include<stdio.h>
int main() {
  int a;
  char s1;
  char s2;
  scanf("%d", &a);
  scanf("%c", &s1);
  scanf("%c", &s2);
  printf("a = %d
", a); printf("s1 = %c
", s1); printf("s2 = %c
", s2); return 0; }
入力

2019
A
B
出力

a = 2019
s1 =
s2 = A
s 1が2019の後のエコー'を吸収したのが見えます。その理由はscanf(%c)が単一文字を読む時、スペースとエコーは全部単一文字とみなされます。
解決策
getar()を使って余分な車を吸収します。

#include<stdio.h>
int main() {
 int a;
 char s1;
 char s2;
 scanf("%d", &a);
 getchar(); //   "
" scanf("%c", &s1); getchar(); // "
" scanf("%c", &s2); printf("a = %d
", a); printf("s1 = %c
", s1); printf("s2 = %c
", s2); return 0; }
タンデムの中で車をろ過します。

#include<stdio.h>
int main() {
 int a;
 char s1;
 char s2;
 scanf("%d
", &a); // scanf("%c
", &s1); scanf("%c", &s2); printf("a = %d
", a); printf("s1 = %c
", s1); printf("s2 = %c
", s2); return 0; }
以上の問題はC言語で文字を入力して車のリターンをブロックすることです。小編集は皆さんのすべての内容を共有しています。参考にしていただければと思います。どうぞよろしくお願いします。