从stdout

时间:2015-04-23 02:54:39

标签: c scanf scanning

我有一个程序可以向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)一次读取所有行。但要做我想要的逻辑,我将需要一次读两行并用它们进行计算,我不知道如何。

3 个答案:

答案 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)

虽然您可以阅读firstlast,但要填写范围,您实际所做的是找到minmax并打印它们之间的所有值包含边界。名称下方是firstlast,但它们代表minmax,无论是按顺序输入值,都会覆盖您的范围。考虑到这一点,另一种确保覆盖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以符合您预期的数据范围。