/* 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
为什么输入整数后我必须输入一些字母才能显示输出?
答案 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