3

scanf文字に問題があります...プログラムを実行しているときに文字を入力できません整数を入力するとプログラムがprintfを出力して最後に移動します...

#include <stdio.h>
#include <stdlib.h>

#define EG 0.23
#define AG 0.70
#define TG 0.15

main() {
    int posothta;
    char eidos;
    float poso;

    printf("Dwse posothta grammatosimwn: ");
    scanf("%d",&posothta);
    printf("Dwse to eidos grammatoshmou: ");
    scanf("%c",&eidos);

    if(eidos=='E' || eidos=='e'){
        poso=posothta*EG;
        printf("To poso pou plirwnoume einai: %f",poso);
    }else if(eidos=='A' || eidos=='a'){
        poso=posothta*AG;
        printf("To poso pou plirwnoume einai: %f",poso);
    }else if(eidos=='T' || eidos=='t'){
        poso=posothta*TG;
        printf("To poso pou plirwnoume einai: %f",poso);
    }else{
        printf("Kapou exei gine kapoio la9os");
    }   

    return 0;
}
4

2 に答える 2

4

あなたがするとき、scanf()それはあなたが求める値だけを取ります..例えば:

scanf("%d",&posothta);

ここに入ったとしましょう5。実際には、 stdin2文字を取得しました:'5'および'\n'(Enterキーを押す必要があり、改行文字が生成されるため)。

5にposothta入ると、その厄介な改行はそこに座ったままになります。次scanf()は文字を探しています。改行文字('\n')は実際に文字であるため、プログラムは質問をせず、その改行を取得して次に進みます。

コードを次のように変更します。

scanf(" %c",&eidos);

scanf()「空白文字をスキップして、次の文字を取得してください」とスキップします。scanf()空白文字には、スペースだけでなく改行も含まれます。

于 2013-03-04T18:37:06.610 に答える
0

バッファをフラッシュする必要があります:

printf("Dwse posothta grammatosimwn: ");
scanf("%d",&posothta);
flushall();
printf("Dwse to eidos grammatoshmou: ");
scanf("%c",&eidos);

flushall() 関数:

#include <stdio.h>
int flushall( void );

説明:

flushall() 関数は、入力ストリームに関連付けられたすべてのバッファをクリアし、出力ストリームに関連付けられたすべてのバッファを書き込みます。入力ファイルに対する後続の読み取り操作により、関連付けられたファイルまたはデバイスから新しいデータが読み取られます。

flushall() 関数を呼び出すことは、開いているすべてのストリーム ファイルに対して fflush() を呼び出すことと同じです。

戻り値:

開いているストリームの数。ファイルへの書き込み中に出力エラーが発生すると、グローバル変数 errno が設定されます。

于 2013-03-04T18:45:42.907 に答える