我现在正在读艾弗·霍顿的《C开头》。无论如何,我的不确定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;
}

最佳答案

如果我们简短地浏览一下您的程序,将发生以下情况:
它提示用户键入数字。
用户输入一个数字并按回车键。
scanf读取号码,但将换行符留在队列中。
它提示用户键入y或n。
它试图读取一个字符,但不跳过任何空格/换行符,因此它最终会使用队列中留下的换行符。
显然,我们需要跳过换行。幸运的是,这相当容易,如果不明显的话:在格式字符串的开头添加一个空格,例如:

scanf(" %c", &answer);

格式字符串中的空格意味着“在读取下一个内容之前尽可能多地跳过空白”。对于大多数转换,这是自动完成的,但对于字符串或字符则不是。

08-16 21:07