㈠ c語言編的程序異常停止 怎麼看是運行到代碼的哪一步出錯了 另外我用的是codeblocks
調試了一下,修改代碼和注釋如下:#include#includeint main(){ char name[20],name1[10],name2[10],name3[10]; int a[3],i,j; float t,b1[3],b2[3],b3[3],sum[3]={0,0,0}; scanf("%d",&a[0]); fflush(stdin); //clear keyboard buffer after read character or string gets(name1); fflush(stdin); //clear keyboard buffer after read character or string for(i=0;ia[1])||( (a[0]==a[1]) &&( (strcmp(name1,name2) )>0))) { j=a[0]; a[0]=a[1]; a[1]=j; strcpy(name,name1); strcpy(name1,name2); strcpy(name2,name); t=sum[0]; sum[0]=sum[1]; sum[1]=t; } if((a[0]>a[2])||((a[0]==a[2])&&((strcmp(name1,name3)>0)))) { j=a[0]; a[0]=a[2]; a[2]=j; strcpy(name,name1); strcpy(name1,name3); strcpy(name3,name); t=sum[0]; sum[0]=sum[2]; sum[2]=t; } if((a[1]>a[2])||((a[1]==a[2])&&((strcmp(name2,name3)>0)))) { j=a[1];a[1]=a[2];a[2]=j; strcpy(name,name2); strcpy(name2,name3); strcpy(name3,name); t=sum[1]; sum[1]=sum[2]; sum[2]=t; } printf("%d,%s,%4.0f\n",a[0],name1,sum[0]); printf("%d,%s,%4.0f\n",a[1],name2,sum[1]); printf("%d,%s,%4.0f\n",a[2],name3,sum[2]); return 0;}主要問題是讀入字元(串)輸入後沒有清鍵盤緩存。在VC6調試通過,運行結果如下圖:供參考。
㈡ C語言中的abort()函數是不是只能終止異常程序
abort 是「流產」的意思。
abort()函數 終止程序運行,並發送出 SIGABRT 消息。它不釋放分配的內存單元,也不返回到調用語句 -- 即不做正常結束時的 該做的常規結束工作,不打掃垃圾。
你當然也可以用它終止本程序在正常情況下結束。
abort()函數 無參。不是用來結束 任意其它程序。
㈢ c語言程序異常終止
#include<stdio.h>
voidmain(){
printf("——黃英來到由唐明明編譯的學生成績系統—— ");
intrs,km;
printf("請定義學生人數:");
scanf("%d",&rs);
printf("請定義科目數:");
scanf("%d",&km);
charsubject[10][10];
for(inti=0;i<km;i++){
printf("請輸入第%d課科目名稱:",i+1);
scanf("%s",subject[i]);
}
charname[100][20];
doublescore[100][10];
for(intm=0;m<rs;m++){
printf("請輸入第%d為學生姓名:",m+1);
scanf("%s",name[m]);//運行到這兒程序就異常終止
for(intn=0;n<km;n++){
printf("請輸入%s的%成績",name[m],subject[n]);
scanf("%lf",&score[m][n]);
}
}
}
㈣ C語言函數調用然後就程序停止運行
float temp,*q; q沒有分配地址,就使用,當然會導致程序異常!
你沒有說清楚,你這兩個函數計算出的結果要存到哪裡,所以,不方便給你改
另:你明明是二維數組,為什麼要用一維指針來操作數組呢?
㈤ C語言指針函數的問題,編譯通過,但是執行程序卻被終止。
fun中的指針datas連指向都沒有,卻用datas->a = a;和datas->b = b;給這指針的目標成員a、b賦值!datas這時還是野指針,它哪兒有a和b?肯定會運行終止的……你這個代碼很好改:把函數名前的*刪除,讓函數返回結構體變數;再把datas前的*刪除,讓它成為一個Data型變數;主函數中把myData前的*刪除,讓它也成為一個結構體變數,把主函數中的printf中的兩個->改成兩個.就可以了。希望對你有幫助。
㈥ C語言運行時出現程序終止時怎麼回事
char*
modify(char
*p)
{
char
newp[9];
printf("請輸入新密碼:\n");
p=newp;
scanf("%s",newp);
//newp[8]
=
'\0';
return
p;
}
返回值錯誤,當這個函數運行結束時,newp所指的內容被系統回收了,而這之前將它賦給了p,也就是函數結束後,p所指的內容不確定。
㈦ c語言運行時出現應用程序發生異常,是什麼請況
有幾種情況:
①變數讀了不能讀或寫的內存空間。
②內存溢出(就是寫進了不能寫的內存空間)
③C函數內部自己調用的異常函數。
㈧ C語言里程序編譯無誤但運行會彈出程序已停止運行是為什麼
造成程序停止運行彈框出錯的可能原因如下:
內存溢出
內存溢出(out of memory)通俗理解就是內存不夠,程序所需要的內存遠遠超出了主機內安裝的內存所承受大小,就叫內存溢出。系統會提示內存溢出,有時候會自動關閉軟體,重啟電腦或者軟體後釋放掉一部分內存又可以正常運行該軟體
造成內存溢出的原因可能有:
1>棧區溢出,例如在main函數內開辟的數組空間過大,一般機器的棧區限制在8MB左右,如果開辟的數組大小超過限制,程序就會崩潰。通常的解決方法是申請堆內存,即將較大的數組作為全局變數開在main函數之外。
2>錯誤地址訪問,常見的非法訪問包括指針漂移,數組越界等,初學者也經常出現類似scanf函數沒加區地址符號&的情況導致在讀取變數的時候因非法訪問造成的溢出。
3>數據類型不符,問題和第二個類似,例如在聲明變數時聲明為int在輸出變數時卻用了%lld,就會造成因數據類型不符而導致的溢出。
編譯器錯誤
部分編譯器由於所使用的標准不同(例如在一台機器上使用的可能是C99標准,而另一台機器上使用的是C11標准),或是因為編譯器鏈接庫的損壞,在少數情況下也可能導致程序出現不限於崩潰退出的異常錯誤,通常解決方法是到編譯器官方網站下載最新版的IDE安裝。
㈨ c語言這個字元函數為什麼會產生異常
puts是輸出字元串,字元串是字元數組,不是二維字元數組。
你這樣a[10][12]={{'a','b'}};只對第一行前兩個元素賦初值,其餘默認0。
那麼相當於此時a[0]是字元串「ab」,a[1]~a[9]都是空字元串。
所以你用二維數組的a[0]來拼接字元串,那列印輸出也應該用a[0]而不是a。
㈩ C語言運行到清屏函數程序就終止了怎麼回事
不會是清屏函數的問題,你檢查下代碼,看看代碼中定義數組沒,這種情況極有可能是類似數組越界的內存問題造成的。