#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;
}
为什么这个程序不起作用?它编译没有错误,但当我输入一个数字时,程序关闭。
答案 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)会返回结果(成功扫描的项目数),您应该对其进行测试。