簡體   English   中英

在C編程中,為什么循環后我的printf不打印?

[英]In C programming why is my printf not printing after a loop?

我需要打印用戶輸入數組的總和和平均值。 因此,如果用戶輸入2,4,6,9,10,則應打印6。但是,在循環結束后,我的printf沒有打印任何內容。

即使我將printf放在數組中,它也只會打印出0。

#include <stdio.h>
#include <math.h>

int main()
{
    int i;
    double num[6],average, sum=0, closest;
    printf("Enter 6 doubles\n");

    for (i=0; i<6; i++)
    {
    scanf("%lf",&num[i]);
    sum += num[i];

    }
    average = sum/i;
    printf("Average %d", average); 
}

您需要在代碼中做一些事情。 您應該確保他們輸入6個數字(在您的開篇文章中僅列出5),這會造成問題。 我將打印更改為使用此格式,並去除了一些您不使用的變量。

#include <stdio.h>
#include <math.h>

int main()
{
    int i;
    double sum = 0;

    printf("Enter 6 doubles\n");
    for (i = 0; i < 6; i++)
    {
        double value;
        scanf("%lf", &value);
        sum += value;
    }

    printf("Average = %f", sum / i);
}

輸入6個雙打:

2 4 6 9 10 10

平均值= 6.833333

這個問題不是重復的,但是我在這里找到了StackOverflow的答案

stdout流已緩沖,因此將僅在到達換行符后(或被告知時)顯示緩沖區中的內容。 您有幾種選擇可以立即打印:

打印到stderr而不是使用fprintf:

fprintf(stderr, "I will be printed immediately");

在需要使用fflush時沖洗stdout:

printf("Buffered, will be flushed"); fflush(stdout); // Will now print everything in the stdout buffer

您還可以使用setbuf禁用對stdout的緩沖:

setbuf(stdout, NULL);

然后關於您的代碼,這里有幾點說明:

  • man 3 printf所述,轉換說明符f已經轉換為雙浮點值,因此不需要長度修飾符標志。
  • 平均值也是兩倍,因此,如果將其打印為整數%d ,則會丟失實際值部分,請考慮也使用%f

以下建議的代碼:

  1. main()使用正確的簽名
  2. 糾正對printf()的調用中使用的格式
  3. 將'\\ n'附加到'printf()'中的格式字符串,以便立即輸出數據,而不是在程序退出后輸出
  4. 給出“魔術”數字(IE 6)有意義的名稱
  5. 正確檢查I / O錯誤並處理任何此類錯誤
  6. 消除不必要的變量
  7. 不包括頭文件,不使用那些內容
  8. 說明為什么包含每個頭文件
  9. 適當限制局部變量“ i”的范圍
  10. 干凈地編譯
  11. 執行所需的功能

現在,建議的代碼為:

#include <stdio.h>   // printf(), scanf(), perror()
//#include <math.h>
#include <stdlib.h>  // exit(), EXIT_FAILURE


#define MAX_ENTRIES 6

int main( void )
{
    //int i;
    // double num[6];
    double num;
    double average;
    double sum=0.0;
    // double closest;

    printf("Enter %d doubles\n", MAX_ENTRIES );

    for (int i=0; i< MAX_ENTRIES; i++)
    {
        if( scanf( "%lf", &num ) != 1 )
        {
            fprintf( stderr, "scanf for number failed\n" );
            exit( EXIT_FAILURE );
        }

        sum += num;
    }

    average = sum / MAX_ENTRIES;
    printf("Average %f\n", average); 
}

典型的代碼運行結果為:

Enter 6 doubles
1.0
2.0
3.0
4.0
5.0
6.0
Average 3.500000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM