2015-04-23 6 views
1

У меня есть программа, которая выводит огромный массив целых чисел в stdout, каждое целое число в строке. Пример:Сканирование двух чисел за раз от 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

Как насчет выполнения двух вызовов 'scanf()' на каждой итерации цикла? –

+3

Вам не нужно читать два номера на каждой итерации. Вы * начинаете *, читая два числа. После этого алгоритм считывает только одно число за раз, повышая то, что 'num2' предшествующей итерации должно было быть« num1 »первым, заправляя' num2' из stdin и т. Д. Завершив, выведя 'num2'. – WhozCraig

+0

@WhozCraig Я был идиотом. Это гораздо более простой способ сделать это.Возьмите первое число в файле, возьмите последний номер, цикл, начинающийся с первого числа, до тех пор, пока вы не достигнете последнего номера и не выведете счетчик циклов каждый раз. Но теперь вопрос в том, как я могу взять первое и последнее числа из stdout? – user3011338

ответ

1

Читать первый 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;                 
} 

этот вход

100 
102 
103 
105 
107 
110 

возвращает этот вывод

100 
101 
102 
103 
104 
105 
106 
107 
108 
109 
110 
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); 
} 
+0

Для такой простоты! +1 – chux

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, чтобы соответствовать ожидаемому диапазону данных.

 Смежные вопросы

  • Нет связанных вопросов^_^