2015-04-06 3 views
0

Я пытаюсь написать простую программу, которая хранит массив и затем возвращает его. Тем не менее, он не возвращает все числа правильно, особенно к концу массива. Вот пример вывода:программа не сохраняет/возвращает массив правильно

Please enter number of numbers 
5 
Please enter number 1 
2 
Please enter number 2 
3 
Please enter number 3 
5 
Please enter number 4 
6 
Please enter number 5 
7 
Number 1 is 2 
Number 2 is 3 
Number 3 is 5 
Number 4 is 14 
Number 5 is 1 
logout 

[Process completed] 

and here is my code: 

#include <stdio.h> 

int main (void) { 
    int i, num; 
    int x[num]; 

    printf("Please enter number of numbers\n"); 
    scanf("%d",&num); 

    for (i = 0; i < num; i++) { 
     printf("Please enter number %d\n", i + 1); 
     scanf("%d",&x[i]); 
    } 
    for (i = 0; i < num; i++) { 
     printf("Number %d is %d\n", i + 1, x[i]); 
    } 

    return 0; 
} 
+0

относительно обращений к зсапЕ() функции: возвращаемое значение (не преобразованное значение параметра) необходимо проверить, чтобы убедиться, что операция ввода/преобразования прошла успешно. – user3629249

ответ

2

перед сканированием NUM вы делаете int x[num] и, как num хранит значение мусора вы не получаете правильный вывод.

int main (void) { 
    int i, num; 
    // int x[num]; // num is not defined here 

    printf("Please enter number of numbers\n"); 
    scanf("%d",&num); 
    int x[num]; 

    for (i = 0; i < num; i++) { 
     printf("Please enter number %d\n", i + 1); 
     scanf("%d",&x[i]); 
    } 
    for (i = 0; i < num; i++) { 
     printf("Number %d is %d\n", i + 1, x[i]); 
    } 

    return 0; 
} 
+2

Примечание. Это действительный только C99 и более поздний. Использование 'malloc' для выделения массива гораздо более переносимо. Какая из двух является «лучшей практикой», зависит от отрасли/приложения. –

+0

@BrianMcFarland Да ... Как это реализовано в C99 ..? Является ли malloc косвенно вызванным, когда мы объявляем x [num]? – Srinath

+0

Теоретически это может быть просто манипуляция указателем стека, как и массив фиксированного размера. Скрытые вызовы 'malloc' и' free' также, вероятно, будут работать. Но большая часть моего низкоуровневого отладочного опыта - w/C89 (или близко к нему), поэтому я не мог сказать вам. –

2

Я думаю, что Вы должны инициализировать переменную Num, так что он не будет иметь значения для мусора сначала ..

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