使用printf和scanf写入c不能按预期工作

时间:2013-09-17 18:47:57

标签: c printf scanf

所以我是C的新手。我正在使用带有MinGW编译器的eclipse。我在第二章使用scanf和printf函数,我的程序正在运行,但只有在我将三个整数输入scanf函数后才将语句打印到控制台。

#include <stdio.h>
int main(void){
    int length, height, width, volume, dweight;

    printf("Enter the box length: ");
    scanf("%d", &length);
    printf("\nEnter the box width: ");
    scanf("%d", &width);
    printf("\nEnter the box height");
    scanf("%d", &height);

    volume = length * width * height;
    dweight = (volume + 165) / 166;

    printf("Dimensions: l = %d, w = %d, h = %d\n", length, width, height);
    printf("Volume: %d\n", volume);
    printf("Dimensional Width: %d\n", dweight);

    return 0;
}

控制台输出:

8 (user input + "Enter" + key)
10 (user input + "Enter" key)
12 (user input + "Enter" key)
Enter the box length: 
Enter the box width: 
Enter the box heightDimensions: l = 8, w = 10, h = 12
Volume: 960
Dimensional Width: 6

任何见解?我期待它到printf,然后scanf用户输入如下:

Enter the box length: (waits for user int input; ex. 8 + "Enter")
Enter the box width: ...

2 个答案:

答案 0 :(得分:5)

在致电fflush(stdout);之前,只需在每个printf()后添加scanf()

#include <stdio.h>
int main(void){
    int length, height, width, volume, dweight;

    printf("Enter the box length: "); fflush(stdout);
    scanf("%d", &length);
    printf("\nEnter the box width: "); fflush(stdout);
    scanf("%d", &width);
    printf("\nEnter the box height"); fflush(stdout);
    scanf("%d", &height);

    volume = length * width * height;
    dweight = (volume + 165) / 166;

    printf("Dimensions: l = %d, w = %d, h = %d\n", length, width, height);
    printf("Volume: %d\n", volume);
    printf("Dimensional Width: %d\n", dweight);

    return 0;
}

答案 1 :(得分:1)

处理C中的Dirty Buffers !!

您可以在每个printf()的末尾添加换行符(转义序列)&#39; \ n&#39; ,这用于刷新缓冲区,最终启用缓冲区显示在输出终端上。(相同的功能是通过fflush(stdout)实现的,但是每次调用printf()时都不需要写它,只需要包含一个字符&#39; \ n&#39; < / em>的)

注意:始终建议使用&#39; \ n&#39;字符作为引号内的最后一个元素&#34;&#34;对于printf(),因为除非使用了刷新机制,否则数据将保留在缓冲区内,但是当main()函数结束时,缓冲区会自动刷新,而且,只有在刷新临时缓冲区时,数据才会到达目标。

我们的新代码应如下所示:

#include <stdio.h>
int main(void){
    int length, height, width, volume, dweight;
    printf("Enter the box length: \n");
    scanf("%d", &length);
    printf("\nEnter the box width: \n");
    scanf("%d", &width);
    printf("\nEnter the box height \n");
    scanf("%d", &height);
    volume = length * width * height;
    dweight = (volume + 165) / 166;
    printf("Dimensions: l = %d, w = %d, h = %d\n", length, width, height);
    printf("Volume: %d\n", volume);
    printf("Dimensional Width: %d\n", dweight);
    return 0;
}

控制台输出:

Enter the box length: 
8
Enter the box width:  
10
Enter the box height 
12
Dimensions: l = 8, w = 10, h = 12
Volume: 960
Dimensional Width: 6