C言語でscanfを使って連続的に2つの文字タイプを入力する問題を解決します。


昨日はCでプログラミングして、scanfに関する細かい問題に出会いました。もし次のようなプログラムを実行したら、

#include<stdio.h>
int main()
{
 char ch1,ch2;
 printf("Input for ch1:/n");
 scanf("%c",&ch1);
 printf("ch1=%c/n",ch1);
 printf("Input for ch2:/n");
 scanf("%c",&ch2);
 printf("ch2=%c/n",ch2);
}
表面的にはこのプログラムは間違っていません。実行もできますが、実行中に第二のscanfに値を入力してch 2を与えた時、プログラムは停止しません。最後のprintfまで直接実行します。
なぜですか?当時は全く考えられなかった。
今日はネットで調べてみましたが、もともとはscanfは標準入力バッファから入力データを読み取り、%cの文字入力フォーマットはリターン文字を受信し、最初のscanfを入力した時に文字を入力した後にエコーを押して終了しました。入力バッファにはこのリターンコードが保存されています。第二のscanfに遭遇した時、自動的にこのリターンをch 2に付与しました。
第二のscanfの入力フォーマットが%cではない場合、フォーマットが合わないため、このリターンは自動的に無視されます。だから連続して2つの%cのフォーマットを入力する時だけこのような問題が発生します。
解決方法:(2つの方法のいずれかを選ぶ)
1です。入力バッファをクリア
最初のscanfの後に文を入れます。
fflush(stdin)//C言語クリア入力バッファ関数
2です。書式制御にスペースを入れる
二つ目のscanfを:
scanf("%c"、&ch 2)//%の前にスペースを入れる
scanfフォーマットの入力時に要求される入力フォーマットはフォーマット制御器と全く同じです。abcdeを入力する必要があります。chで得られた値はe)スペースです。前に入力したリターンを相殺できます。
補足知識:C言語を使って実現します。2つの文字列を入力して、他の文字列に1つの文字列が現れる回数を統計します。
二つの文字列を入力し、一つの文字列が別の文字列に現れる回数を統計します。
例えば、asdfgasfgasf、asは、3を出力します。
プログラミング環境はcodeblocksで、コンパイラはGUN-GCCで、オペレーティングシステムはwin-7-64ビットです。
解析:このコードは主にアルゴリズムを使っています。文字列マッチングのシンプルなパターンマッチングアルゴリズムです。アルゴリズムを読んでコードを読むとストレスがなくなります。
コードは以下の通りです

#include <stdio.h>
#include <stdlib.h>
int main()
{
 char S[100],T[20];
 char ch1,ch2;
 printf("       :
"); ch1=getchar(); int i=0; while(ch1!='
') { S[i]=ch1; i++; ch1=getchar(); } printf(" :
"); ch2=getchar(); int j=0; while(ch2!='
') { T[j]=ch2; j++; ch2=getchar(); } int m,n;//m S ,n T m=0; n=0; int num=0;//num while(m<=i&&n<=j) { if(S[m]==T[n]) { m++; n++; } else { m=m-n+1; n=0; } if(n==j) { num++; } } if(m==i+1) { printf(" %d",num); } }
以上のC言語の中でscanfを使って2つの文字のタイプを連続的に入力した問題は、小編集が皆さんに提供した内容の全てです。