输出不会立即出现

时间:2012-10-10 03:55:49

标签: c

/* Written by: Tai Ngo
   Date: 10/03/2012
   Description: This program allows the users to print numbers
   in the desired orders.
   Problem B
*/


#include <stdio.h>


int main (void)

{   //Global declaration
    int num1;
    int num2;
    int num3;
    int num4;
    int num5;
    int num6;
    int num7;
    int num8;
    int num9;
    int num10;

    //Statements
    printf("Enter 10 integers, separated by spaces:");
    scanf("%5d %5d %5d %5d %5d %5d %5d %5d %5d %5d ", &num1, &num2, &num3, &num4, &num5, &num6, &num7, &num8, &num9, &num10 );

    printf("%5d    %5d\n", num1, num10);
    printf("%5d    %5d\n", num2, num9);
    printf("%5d    %5d\n", num3, num8);
    printf("%5d    %5d\n", num4, num7);
    printf("%5d    %5d\n", num5, num6);

    return 0;
} //main

为什么输入整数后我必须输入一些字母才能显示输出?

3 个答案:

答案 0 :(得分:0)

如果您希望数字以空格分隔,那么您不应该在最后一个数字后面请求空格。我会摆脱你的scanf格式的所有空格;他们没有必要。

此外,最好在printf和scanf调用之间放置fflush(stdout),否则无法保证用户在scanf尝试读取之前会看到打印输出。

答案 1 :(得分:0)

scanf格式的空格()告诉scanf读取并丢弃空白字符(空格,制表符和换行符),直到它获得非空白字符并在输入上留下非空格字符(所以它的下一个字符读)。由于您的格式字符串以空格结尾,因此scanf在读取您要求的10个整数后将执行此操作。

如果你摆脱那个空间,那么scanf会在它读取第10个数字后立即返回,并且不会尝试读取它之后的任何内容,所以你不必再输入另一行(除了空格之外的东西)让程序继续。

由于%d说明符也会在读取的数字之前跳过输入上的任何空格,因此scanf格式中的所有其余空格都是冗余的(并且不需要),但它们实际上并不会导致任何空格伤害 - 他们只是通过微不足道的无法估量的数量来减慢通话速度。

答案 2 :(得分:0)

请记住,当您在scanf中添加%5d时,这意味着您要求用户输入每个整数以包含5位数

例如: 11111 22222 33333 44444 55555 66666 77777 88888 99999 12345

如果您不想将用户限制为5位数,只需将%5d替换为%d .... 甚至 例如: 1 2 3 12345 1223 123 122 333 444 11 22