Почему мой цикл завершается даже с условием? - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь получить пользовательский ввод и сохранить его в массиве Fib [i].После этого выведите массив Fib [i].Когда пользователь вводит -1, цикл завершается и программа завершается.Но мой код не печатается и не завершается.

#include <stdio.h>

double Fib[50];//globally declared  
int fib(int n)
{
    int i;

    for(i=0; i<50; i++)
    {   
        scanf("%d", &Fib[i]); 
        if(i==-1)
         break;
       //printf("numbers entered %d\n", Fib[i]); // <- doesn't terminate if printf is here
    }
        printf("numbers entered %d\n", Fib[i]); //doesn't print anything??

}
int main()
{
    int i, n;
//calling the function
    fib(n);

return 0;

}

пользовательский ввод:

4
5
-1

Ожидаемый вывод:

Numbers entered 
4
5

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Первая проблема: вы объявляете Fib как массив double:

double Fib[50];

Но вы используете %d для чтения значений, которые предназначены для чтения int:

scanf("%d", &Fib[i]); 

Использование неправильного спецификатора формата вызывает неопределенное поведение .Предположительно, вы хотите хранить целые числа, поэтому измените массив на int:

int Fib[50];

Далее следует условие прорыва вашего массива:

if(i==-1)

i - это индекс вашего массива, которыйколеблется от 0 до 49, так что это никогда не будет правдой.Вы хотите остановить, когда пользователь вводит -1, и это значение будет в Fib[i]:

if(Fib[i]==-1)

Наконец, печать массива:

printf("numbers entered %d\n", Fib[i]);

Это не печатаетмассив.Он просто печатает элемент с последним индексом i, и значение этого индекса всегда будет равно -1.Вам нужен отдельный цикл для печати значений:

int j;
printf("numbers entered:\n");
for (j=0; j<i; j++) {
    printf("%d\n", Fib[j]);
}
0 голосов
/ 27 февраля 2019

В этом коде много проблем со написанием кода, но кажется, что вы новичок, поэтому я делаю минимальные изменения только для вашего понимания

#include <stdio.h>

double Fib[50];//globally declared  
int fib(int n)
{
    int i,j;

    for(i=0; i<50; i++)
    {   
        scanf("%lf", &Fib[i]); 
        if(Fib[i]==-1)
         break;
    }  
    printf("numbers entered \n");
    for(int j=0;j<i;j++)
    {
        printf("%lf\n",Fib[j]);
    }
}
int main()
{
    int i, n;
    fib(n);
    return 0;

}
...