1

を使用して小さなプログラムを実行しようとしていdo-whileます。

#include<stdio.h>
#include<conio.h>
void main()
{
char another;
int num;
do
{
    printf("Enter a number");
    scanf("%d",&num);
    printf("Square of %d id %d",num,num*num);
    printf("Want to another another number y/n");
    scanf("%c",&another);
}while(another=='y');
}

プログラムを実行しようとすると、正常に実行されます。数字を入力すると、その二乗が表示されます。そして、なるほどWant to enter another number y/n。しかし、任意のキー (y または n) を押すとすぐに、Enter キーを押して入力を行う前にプログラムが終了します。何度も試しましたが、成功しませんでした。

しかし、ユーザーに (y/n の代わりに) 1 または 2 のいずれかを入力するように求めると、プログラムは正常に実行されます。その場合、整数入力を取り、while ブロックをチェックできます。の場合another == 1、プログラムが再度実行されます。

while私の問題は、条件内の文字を確認できない理由です。

4

1 に答える 1

1

動作しない理由は、scanfgetsの後num、新しい行がまだバッファ内にあるため、次のscanfフォーマット%c指定子によって処理されるためです。それを修正する直接的な方法は、次を使用することです。

scanf(" %c", &another);
//     ^space

オリジナルscanf("%c:,&another);はコンパイルされないことに注意してください。ただし、それはタイプミスだと思います。常に使用するint mainか、未定義の動作です。

于 2013-10-22T06:34:39.047 に答える