我有一个程序可以向stdout输出一个庞大的整数数组,每一个整数都在一行中。例如:
103
104
105
107
我需要编写另一个读取该数组的程序,并填充数字不是前一个数字1的增量的空格。数字之间唯一不同的是2(105,107),这使得它更容易。
这是我执行该逻辑的代码:
printf("d",num1);
if ((num2-num1) != 1)
numbetween = num1 + 1;
printf("%d", numbetween);
printf("%d", num2);
else(
printf("%d",num2);
)
所以这个程序的输出现在是:
103
104
105
106
107
我的问题是阅读这些数字。我知道我可以while (scanf("%hd", &num) != EOF)
一次读取所有行。但要做我想要的逻辑,我将需要一次读两行并用它们进行计算,我不知道如何。
答案 0 :(得分:2)
您可以随时只读取文件中的第一个和最后一个数字,然后在两者之间打印。
int main( void )
{
// get the first value in the file
int start;
if ( scanf( "%d", &start ) != 1 )
exit( 1 );
// get the last value in the file
int end = start;
while ( scanf( "%d", &end ) == 1 )
;
// print the list of numbers
for ( int i = start; i <= end; i++ )
printf( "%d\n", i );
}
答案 1 :(得分:1)
首先阅读query.setParameter(1, list.get(0));
,然后在您阅读下一个?
num
此输入
int
返回此输出
#include <stdio.h>
#include <stdlib.h>
int main()
{
int previous = 0;
int num;
scanf("%hd", &previous);
while (scanf("%hd", &num) != EOF) {
for (int i = previous; i < num; i++) {
printf("%d\n" , i);
}
previous = num;
}
printf("%d\n" , previous);
return 0;
}
答案 2 :(得分:1)
虽然您可以阅读first
和last
,但要填写范围,您实际所做的是找到min
和max
并打印它们之间的所有值包含边界。名称下方是first
和last
,但它们代表min
和max
,无论是按顺序输入值,都会覆盖您的范围。考虑到这一点,另一种确保覆盖int
范围限制的方法是:
#include <stdio.h>
int main (void) {
int num = 0;
int first = (1U << 31) - 1; /* INT_MAX */
int last = (-first - 1); /* INT_MIN */
/* read all values saving only first (min) and last (max) */
while (scanf (" %d", &num) != EOF) {
first = num < first ? num : first;
last = num > last ? num : last;
}
/* print all values first -> last */
for (num = first; num <= last; num++)
printf ("%d\n", num);
return 0;
}
<强>输入强>
$ cat dat/firstlast.txt
21
25
29
33
37
41
45
49
53
57
61
65
69
73
77
81
85
89
93
97
101
<强>输出强>
$ ./bin/firstlast < dat/firstlast.txt
21
22
23
24
25
26
27
28
29
<snip>
94
95
96
97
98
99
100
101
注意:您可以更改types
以符合您预期的数据范围。