【问题标题】:Why does the following program stops working after taking the inputs in the array? [closed]为什么以下程序在获取数组中的输入后停止工作? [关闭]
【发布时间】:2019-02-16 03:11:51
【问题描述】:

我编写了以下程序来查找数组的最大和最小元素。程序接受数组的输入,但随后停止工作。这背后的原因是什么?

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,i,l,s,t;
    printf("Enter number of inputs.\n");
    scanf("%d",&n);
    int a[n];
    printf("Enter inputs.\n");
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    l=a[0];
    s=a[0];
    for(i=0;i<n;i++)
    {
        if(a[i]>l)
        {
            l=a[i];
        }
        if(a[i]<s)
        {
            s=a[i];
        }
    }
    printf("max = %d , min = %d\n",l,s);
    return 0;
}

【问题讨论】:

  • 程序在执行完程序中的所有操作后将停止工作。问题是什么?你有 SEGV 什么的?
  • @MikeCAT 它并没有做它应该做的一切。它只允许输入数组的元素,然后出现错误消息“Program.exe has stooped working.”。
  • 您确定正在编译和运行您粘贴的代码吗?您在粘贴的第 10 行缺少 " 字符。
  • 一个好的“它没有按照我的预期做”问题的标志之一是表明你的期望和你得到的。如果您包括您的期望和您得到的,那么您将更快地获得更好的帮助。
  • "... 但随后停止工作" 不是一个好的问题陈述。您应该提供有关它如何不工作的详细信息。

标签: c arrays max scanf min


【解决方案1】:

您在这里缺少一个" 符号:

printf("Enter of inputs.\n);

之后,它对我来说效果很好(在 Linux 上),只有一个肯定无害的警告:

$ gcc -Wall -Wextra t.c
t.c: In function ‘main’:
t.c:6:17: warning: unused variable ‘t’ [-Wunused-variable]
     int n,i,l,s,t;

$ ./a.out
Enter number of inputs.
1
Enter of inputs.
1
max = 1 , min = 1
$ ./a.out
Enter number of inputs.
10
Enter of inputs.
20
21
23
24
25
26
27
28
29
2023
max = 2023 , min = 20

可能你打错了,认为你已经重新编译了它,但接着又运行了一个旧的可执行文件(因为它无法重新编译)?

【讨论】:

    【解决方案2】:

    首先,您的代码在下面的 printf 语句中缺少关闭 "。您的代码工作正常。

    printf("Enter of inputs.\n");
    

    还有另一种可能性,您可能正在使用某个 IDE,它会在程序结束时关闭结果窗口,您可以尝试将 getchar() 放在 return 之前以按住屏幕。

    【讨论】:

    • 这是我在这里复制时犯的一个错误。
    • @AASingh 立即查看答案
    【解决方案3】:

    在 cpp 中用于动态数组应该使用这种语法。

    int *a = new int[n] ;
    

    如果你喜欢使用 cpp 并且想要动态列表,你可以使用矢量

    std::vector<int> a;
    

    【讨论】:

    • 它是用 C 而不是 cpp 编写的。
    • C++ 不支持动态数组。无论如何,C 是一种不同的语言。
    【解决方案4】:

    嗯,找到最大和最小数字后,您没有提供输出(printf 语句)。程序应该是这样的:-

    int main()
    {
    int n,i,l,s,t;
    printf("Enter number of inputs.\n");
    scanf("%d",&n);
    int a[n];
    printf("Enter of inputs.\n");
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    l=a[0];
    s=a[0];
    for(i=0;i<n;i++)
    {
        if(a[i]>l)
        {
            l=a[i];
        }
        if(a[i]<s)
        {
            s=a[i];
        }
    }
    printf("Largest no : %d and smallest no : %d",l,s);
    return 0;
    }
    

    【讨论】:

    • 您能否更明确地说明您的建议如何改进 OP 的代码?
    猜你喜欢
    • 2016-02-07
    • 1970-01-01
    • 2012-07-21
    • 2021-10-31
    • 2014-06-04
    • 2020-08-04
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多