输入整数后为什么我的程序会崩溃? - C

时间:2018-01-19 16:40:00

标签: c

我对C编码非常陌生,我想知道为什么会这样崩溃?输入值并按回车键后,我的程序立即崩溃。我记得有时你会使用&在scanf行中有一个数组,有时你不会。所以,当我删除&它瞬间崩溃了。我不确定如何解决这个问题并希望得到帮助。

我想要完成的事情:

  • "编写一个程序,要求用户输入一个以0结尾的整数序列(最后一个数字为0)并打印在一行上输入的所有数字。"
  • 程序在我输入其他变量之前崩溃。我没有完成编码,但由于它一直在崩溃,我无法进一步。

     int main () {
           int ru[1000];
           int read;
           int nums;
           int counts;
    
           printf("Enter integers, press 0 to end user input \n");
    
           while (nums>0) {
               scanf("%d",&ru[nums]);
    
               if (nums==0)
                   printf("%d ", ru[nums]);
           }
    
          system("pause>nul");
          return 0;
     }
    

2 个答案:

答案 0 :(得分:1)

正如几个人已经指出的那样,你不会在代码中的任何一点为nums分配值,而是在几个地方使用它。

你应该填充nums并且当它大于零时(如果你想要包含负整数,这可能不等于零),将它的值存储到你的数组中。你可以使用另一个变量跟踪你在数组中的位置(我已经选择了你已经声明的read),确保它首先被初始化为0.

while循环终止后,nums为零或您填充数组,然后打印出您收集的数字。

int main (void) {
   int ru[1000];
   int read=0;
   int nums;
   int counts;

   printf("Enter integers, press 0 to end user input \n");

   scanf("%d",&nums);
   while ((nums>0)&&(read<1000)) {
       ru[read++]=nums;
       scanf("%d",&nums);
   }
   for(counts=0;counts<read;counts++) {
       printf("%d ",ru[counts]);
   }
   printf("\n");

   system("pause>nul");
   return 0;
}

答案 1 :(得分:0)

您正在使用的scanf()作为以下原型:

int scanf(const char *format, ...);

你应该将指向缓冲区变量的de指针作为参数,但是你给出一个指向数组的指针(指向指针的指针)。:

scanf("%d",&ru[nums]);

您的问题的解决方案可能是:

 #include <stdio.h>
 #include <stdlib.h>
 int main () 
 {
        int ru[1000];
        int i = 0;
        printf("Enter integers, press 0 to end user input \n");
        do
        {
            scanf("%d",&ru[i]);
        }while (ru[i]!= 0 && i++ < 1000);
        for(i = 0; ru[i] != 0 ; i++)
            printf("%d ", ru[i]);
        return EXIT_SUCCESS;
  }