显示数组内容+输入

时间:2015-07-21 20:46:17

标签: arrays sorting

世界上有什么问题:

 #include <stdio.h>

int main(int argc, char const *argv[])
{
    int array[20];
    int *pArray = array;
    int count;
    int i = 0;

    while(1)
        {
            scanf("%d", array+i );
            if(*(pArray+i) == -1) break;
            i++;
        }

    printf("Contents: ");

    while(1){

         if (*(pArray + i) != -1)  
         {
           printf("%d ", *(pArray + i) ); 
           i++;
         }

     }

    return 0;
}

谢谢。我试图从用户获取输入,然后显示数组的内容。我打算按顺序安排它们,但是我会等到有人回复。

1 个答案:

答案 0 :(得分:1)

您可能面临stack around the variable array is corrupted的错误。原因是如果给定输入为-1,则首先获取输入然后终止循环。

        scanf("%d", array+i );
        if(*(pArray+i) == -1) break;

现在假设i=20将会发生什么?

当然,你的代码会在scanf语句中崩溃,因为它会尝试访问不允许的数组+20(第20个索引)。

你还需要首先初始化数组,因为当你声明一个数组时,它包含垃圾值,或许用0来初始化最后一个索引就可以完成这项工作。您可以使用以下代码:

    #include <stdio.h>
    int main(void)
    {
        int array[20]; 

        /*INITIALIZE THE LAST INDEX WITH -1 TO APPLY THE TERMINATING CONDITION*/
        array[19] = -1;

        int i = 0;

        while(1)
        {
            scanf("%d", array+i );

            i++;     //INCREMENT HERE TO CHECK THE NEXT INDEX INSTEAD OF CHECKING THIS ONE

            if(array+i == -1)
            {
                    scanf("%d", array+i ); //TAKE THE INPUT FOR THE LAST INDEX
                    break; //TERMINATE THE LOOP
            }
        }

        printf("Contents: ");

        i = 0;     // RESET the counter back to ZERO.
        while(i != 20)
        {
            printf("%d ", array[i] ); 
            i++;
        }

        return 0;

    }

您似乎没有任何理由使用pArrayarray也可以完全按照pArray的要求进行操作。要安排订单,您必须应用任何排序算法。希望这会有所帮助。