最低打印程序不起作用

时间:2014-12-04 20:33:38

标签: c function

#include <stdio.h>

float *dupabiskupa(float *tab, int roz)
{
    float *a;
    *a=tab[0];
    int i;
    for(i=0;i<roz;i++)
    {
        if(tab[i]<*a)
            *a=tab[i];
    }
    return a;
}

int main()
{
    float wsk;
    int rozmiar;
    int i;
    printf("Podaj rozmiar tablicy \n");
    scanf("%d",&rozmiar);
    float tab1[rozmiar];

    for(i=0; i<rozmiar;i++)
    scanf("%f", &tab1[i]);

    wsk=*dupabiskupa(tab1, rozmiar);
    printf("%f", wsk);
    return 0;
}

为什么这个程序不起作用?它编译没有错误,但当我输入一个数字时,程序关闭。

2 个答案:

答案 0 :(得分:1)

首先,请注意代码

float *a;
*a=tab[0];

未定义的行为:由于使用了未初始化的指针a,它试图将值存储在任意内存位置。

任何事情都可能发生。

包括你期望发生的事情。


关于关闭控制台窗口,如果这是关于什么的。

在Visual Studio中,使用 Ctrl + F5 运行程序。这使控制台窗口最后保持打开状态。其他IDE通常具有相应的功能。

或者您可以从命令行运行该程序。

答案 1 :(得分:1)

编译所有警告和调试信息(例如gcc -Wall -Wextra -g)。了解如何使用调试器(gdb)。阅读有关C编程和指针的更多信息。

你的第一个功能应该是

float dupabiskupa(float *tab, int roz) {
  float a;
  if (roz <= 0 || !tab)
    return -INFINITY;
  a=tab[0];
  for(int i=1; i<roz; i++) {
    if(tab[i]<a)
        a=tab[i];
  }
  return a;
}

看起来你不明白指针是什么,以及为什么数组会被衰减为C中的指针。花几个小时阅读更多的C编程书并使用调试器进行操作。

请阅读您正在使用的每个功能的文档。请注意,scanf(3)会返回结果(成功扫描的项目数),您应该对其进行测试。

害怕undefined behavior