
一闪而过是程序自动结束,同时编译器没有提供结果驻留功能。对于此种情况,可以手动在代码结尾增加驻留功能的函数。常用的有如下两种:
1 通过getch函数驻留。
getch会等待从屏幕的输入,在main函数退出前,增加
getch();
调用,系统会等待输入,直到有新的输入,才会退出界面。
2 通过system("pause");来实现驻留。
在main退出前调用
system("pause");
会调用系统的pause函数,提示并实现按任意键退出程序效果。
如果是已经编译好的C语言程序,可以通过开始->运行,键入cmd后回车。
在打开的命令行窗口,将可执行文件拖动到窗口上,再回车即可运行该程序,在此窗口不会出现闪退,从而观察运行结果。
由于该问题仅在windows平台出现,所以以上介绍均针对windows平台。
造成程序停止运行d框出错的可能原因如下:
内存溢出
内存溢出(out of memory)通俗理解就是内存不够,程序所需要的内存远远超出了主机内安装的内存所承受大小,就叫内存溢出。系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件
造成内存溢出的原因可能有:
1>栈区溢出,例如在main函数内开辟的数组空间过大,一般机器的栈区限制在8MB左右,如果开辟的数组大小超过限制,程序就会崩溃。通常的解决方法是申请堆内存,即将较大的数组作为全局变量开在main函数之外。
2>错误地址访问,常见的非法访问包括指针漂移,数组越界等,初学者也经常出现类似scanf函数没加区地址符号&的情况导致在读取变量的时候因非法访问造成的溢出。
3>数据类型不符,问题和第二个类似,例如在声明变量时声明为int在输出变量时却用了%lld,就会造成因数据类型不符而导致的溢出。
编译器错误
部分编译器由于所使用的标准不同(例如在一台机器上使用的可能是C99标准,而另一台机器上使用的是C11标准),或是因为编译器链接库的损坏,在少数情况下也可能导致程序出现不限于崩溃退出的异常错误,通常解决方法是到编译器官方网站下载最新版的IDE安装。
在 %d 的中间,加上数字,如果你要讲所有的数字显示在25的位置,
那么就用25 减去 你前面的字符个数,
比如:char 4个字符,那就是25-4 =21,写成 %21d
比如:int 3个字符,那就是25-3 =22,写成 %22d
下面只写了三行,你试试吧
#include <stdioh>#include <stringh>
int main()
{
printf("char%21d\n",11);
printf("int%22d\n",11);
printf("short int%16d\n",11);
}
楼上的看清楚没有啊。。。
个人见解:主函数输入了两个字符串,并传入fun()函数中;是用来计算b字符串在a中出现的次数。。
lz可以自己测试下,我的测试:
1a:weareone
b:we
m = 1;
2 a:weareone
b:w
m = 1;
3 a:weareone
b:e
m = 3;
4 a = weareoneweareone
b = weareone
m = 2;
5 a = weareoneweareonewe
b = weareone
m = 2
改成这样:
int main()
{
int flag=0;
double faHeight, moHeight,YouHeight;
char sport, sex, diet;
printf("Welcome to height test\n");
printf("please input your sex,M or F\n");
scanf("%c", &sex);
getchar();
printf("please input your father and mother's height\n");
scanf("%lf,%lf", &faHeight, &moHeight);
getchar();
printf("Do you like sport Y or N\n");
scanf("%c", &sport);
getchar();
printf("Do you have a good diet Y or N\n");
scanf("%c", &diet);
getchar();
if (sex == 'F')
{
flag = flag + 1;
}
if (sport == 'Y');
{
flag = flag + 10;
}
if (diet == 'Y');
{
flag = flag + 100;
}
switch (flag)
{
case 1:
YouHeight = (faHeight + moHeight)054;
break;
case 11:
YouHeight = (faHeight + moHeight)054 102;
break;
case 111:
YouHeight = (faHeight + moHeight)0541035;
break;
case 101:
YouHeight = (faHeight + moHeight)0541015;
break;
case 0:
YouHeight = (faHeight09232 + moHeight) / 2;
break;
case 10:
YouHeight = (faHeight0923 + moHeight) / 2 102;
break;
case 110:
YouHeight = (faHeight0923 + moHeight) / 2 1035;
break;
case 100:
YouHeight = (faHeight0923 + moHeight) / 2 1015;
break;
default:
printf("you input the wrong word\n");
break;
}
printf("You heingt is %f\n", YouHeight);
getchar();
return 0;
}
这是由于你不知道具体的方法。首先要确定你编写的是win32控制台应用程序。
然后,有三个方法来执行:
方法一:
点左下角带windows旗帜的图标,输入cmd,出现DOS窗口,然后将你编写的C语言程序编译成的可执行文件拖曳到窗口中,执行即可。
方法二:
在你的程序中添加头文件#include <stdlibh>
在你的主程序中添加代码:system("pause");
方法三:
在你的程序中添加头文件#include <conioh>
在你的主程序中添加getch();
#include<stdioh>
int main(){
double r,d,c,s;
char ch;
scanf("%f",&r);
d=20r;
c=31415926d;
s=31415926rr;
printf("%32f %32f %32\n",d,c,s);
scanf("%c",&ch);//是想输入任意字符结束吧,记得有个getch()还是什么忘记了,自己找找
return 0;
}
单片机内存有限,据我所知,内存中分3部分,一部分放程序指令,一部分作为堆用,一部分作为栈,这里用递归了,每次调用函数会把当前状态压栈,没有结束,那样存储空间不够,栈溢出,单片机系统不会复位,但是程序会乱跑。个人理解而已。
以上就是关于C语言中避免程序一闪而过的代码intmain(void){…system("pause");见下全部的内容,包括:C语言中避免程序一闪而过的代码intmain(void){…system("pause");见下、C语言里程序编译无误但运行会d出程序已停止运行是为什么、为什么用C语言编写的程序格式会错位等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)