scanf прочитай неправильную стоимость

Я встречаюсь с проблемой, которую мне не удается понять и - относительно "scanf", относительно которого я использую в C ++. Код - следующий:

#include <stdio.h>

using namespace std;

int main(){
    int i, n, overtakes, start[26], finish[26];

    while(scanf("%d", &n) != EOF);{
        printf("%d\n", n);
        for(i = 0; i < n; i++){
            scanf("%d", &start[i]);         
            printf("%d ", start[i]);
        }
        for(i = 0; i < n; i++){
            scanf("%d", &finish[i]);    
        }
        overtakes = 0;
        for(i = 0; i < n; i++){
            if(start[i] < finish[i]){
                overtakes = overtakes+(finish[i]-start[i]);
        }   
    }
    //printf("%d\n", overtakes);        
}
return 0;
}

Моя проблема здесь состоит в том, что я не понимаю, которым первый "scanf", кажется, не получает подходящий ввод, так как, попросив у него печатать "n" и стоимость договоренности "start" (как доказательство) со следующим вводом:

9
7 1 8 9 5 6 2 3 4
8 1 9 5 7 3 2 6 4

я получаю:

13
204196 6422220 1952017685 1952334620 6422284 
1952014984 8 1951951811 1951951802 1994325155 4199136 4199136 0 

Я оцениваю любую помощь и(или) сотрудничество.

2
задан 24.03.2019, 23:32
1 ответ

Ты ввел один';' в конце while:

//                           vvv
while(scanf("%d", &n) != EOF) ; {

С этим';' estГЎs способствуя тому, чтобы sГіlo выполнили ее condiciГіn while, а именно:

while(scanf("%d", &n) != EOF);   // <------- Se ejecuta scanf hasta el final de la entrada

// Al acabar el while, ejecuta una sóla vez lo que hay entre llaves, pues está fuera del while:
{
    printf("%d\n", n);
    for(i = 0; i < n; i++){
        scanf("%d", &start[i]); 
    ...
    ...
1
ответ дан 02.12.2019, 05:07

Теги

Похожие вопросы