4

私は現在、Ivor Horton の Beginning C を読んでいます。とにかく、私の無期限は、先に進む前に私の声明を2回for印刷しています。printf私は何か間違ったことをしていると確信していますが、本からコードをコピーしました。それが問題になる場合は、Dev-C++ を使用しています。これがコードです...ありがとう

#include <stdio.h>
#include <ctype.h>  // For tolower() function  //

int main(void)
{
char answer = 'N';
double total = 0.0;  // Total of values entered //
double value = 0.0;  // Value entered //
int count = 0;

printf("This program calculates the average of"
                       " any number of values.");
for( ;; )
{
    printf("\nEnter a value: ");
    scanf("%lf", &value);
    total+=value;
    ++count;

    printf("Do you want to enter another value? (Y or N): ");
    scanf("%c", &answer);

    if(tolower(answer) == 'n')
        break;
}

printf("The average is %.2lf.", total/count);
return 0;
}
4

3 に答える 3

6

プログラムを簡単に実行すると、次のようになります。

  1. ユーザーに数字を入力するように求めます。
  2. ユーザーは数字を入力し、Enter キーを押します。
  3. scanf番号を読み取りますが、キューに改行を残します。
  4. ユーザーに Y または N を入力するように求めます。
  5. 文字を読み取ろうとしますが、空白/改行をスキップしないため、キューに残っていた改行を消費してしまいます。

明らかに、改行をスキップする必要があります。幸いなことに、自明ではない場合でも、かなり簡単です: フォーマット文字列の先頭にスペースを追加します。

scanf(" %c", &answer);

フォーマット文字列内のスペースは、「次のものを読み取る前にできるだけ多くの空白をスキップする」ことを意味します。これはほとんどの変換で自動的に行われますが、文字列や文字では行われません。

于 2013-06-28T03:24:43.733 に答える
2

この行を変更

scanf("%c", &answer);

scanf(" %c", &answer);

スペースがあると、scanf は入力した文字の前の空白を無視します。

空白は、数値を入力した後に Enter を押した結果です。

于 2013-06-28T03:24:59.860 に答える
-1

コードは問題ありませんが、見落とされているのは次のとおりですfflush(stdin)scanf関数の前に。scanfこれらの落とし穴を避けるために、常に関数の前に使用できます。「Enter」キーを押すと、stdin バッファーへの入力として改行文字「\n」が与えられます。したがって、ループ内の最初の scanf 関数は、それを入力として想定し、ユーザーが値を入力するのを待ちません。

#include <stdio.h>
#include <ctype.h>  // For tolower() function  //

int main(void)
{
char answer = 'N';
double total = 0.0;  // Total of values entered //
double value = 0.0;  // Value entered //
int count = 0;

printf("This program calculates the average of"
                       " any number of values.");
while(1)
{
    printf("\nEnter a value: ");
    fflush(stdin);
    scanf("%lf", &value);
    total+=value;
    ++count;

    printf("Do you want to enter another value? (Y or N): ");
    fflush(stdin);
    scanf("%c", &answer);
    if(tolower(answer) == 'n')
        break;
}

printf("The average is %.2lf.", total/count);
getch();
return 0;
}

getch()コンソールを使用している場合は、結果を表示する関数も追加します。

于 2013-06-28T03:41:42.437 に答える