Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

Cでfgets()/ gets()/ scanf()が後にある場合のscanf()の問題


この問題は、scanfの後にfgets()/ gets()/ scanf()が続く場合に何が機能するかまたは出力になるかを示しています。

fgets()/ gets()の後にscanf()

#include<stdio.h>
int main() {
   int x;
   char str[100];
   scanf("%d", &x);
   fgets(str, 100, stdin);
   printf("x = %d, str = %s", x, str);
   return 0;
}

出力

Input:
30
String
Output:
x = 30, str =

説明

fgets()およびgets()は、実行時にユーザーから文字列入力を受け取るために使用されます。整数値を入力して実行すると、文字列値は取得されません。整数値の後に改行を指定すると、fgets()またはgets()は、目的の入力である「文字列」ではなく、入力として改行を取得するためです。 。

scanf()の後にscanf()

scanf()の後にscanf()を繰り返し取得するには、ループを使用できます。

#include<stdio.h>
int main() {
   int a;
   printf("enter q to quit");
   do {
      printf("\nenter a character and q to exit");
      scanf("%c", &a);
      printf("%c\n", a);
   }while (a != ‘q’);
   return 0;
}

出力

Input:
abq
Output:
enter q to quit
enter a character and q to exita
a
enter a character and q to exit
enter a character and q to exitb
b
enter a character and q to exit
enter a character and q to exitq

説明

ここでは、余分な行が'文字を入力し、qを終了する'余分な新しい行の後に表示されます。これは、scanf()が次のscanf()によって読み取られる改行文字をバッファに残すたびに、それに続くためです。 。 scanf(“%c \ n”);のようなscanf()の型指定子で「\ n」を使用してこの問題を解決するには、または、他のオプションは、追加のgetchar()またはscanf()を使用して追加の改行を読み取ることができることです。


  1. 忘れた Windows 8 の画像/PIN/テキスト パスワードをリセットする方法

    Microsoft のこれまでで最も安全なオペレーティング システムである Windows 8 では、Windows アカウントにログインするときに使用できる 2 つの新しいパスワード タイプ (4 桁の PIN と画像パスワード) が導入されています。 PIN を使用するとすばやくログインでき、ピクチャ パスワードを使用すると、より創造的で楽しい方法でログインできます。ピクチャ パスワードや PIN パスワードをリセットする必要がある場合など、通常のパスワードは依然として必須であるため、無視することはできません。 Windows 8 のパスワードをお忘れですか?ねえ、それは起こります。幸

  2. Windows / Mac /オンラインでGoogle Earthを記録する方法

    文字通り小さな世界です。私たちが何を意味するのか疑問に思っていますか? 世界中を旅することがあなたの熱望であるなら、旅行チケットに何百ドルも何千ドルも費やす必要はないかもしれません.代わりに、Google Earth のようなプラットフォームが世界中を旅する欲求を満たすことができます .あなたがしなければならないのは、その場所に入るだけで、その場所の仮想の景色が見えるでしょう. もちろん、それはあなたの夢の目的地に物理的にいることにはまだ匹敵しません.しかし、夢の目的地のバーチャル ツアーを Google Earth で友人や家族に提供したいと仮定してみましょう。近い将来、休暇でそこに向