c程序編譯成功後運行閃退
Ⅰ C程序編譯沒問題,但是運行要崩潰
我大概看了下你的源碼,最主要的問題是你沒有對front進行初始化就對其進行了操作,front指向不確定,對其進行操作當然會破壞程序本身。
另外我要說的是,隊列無論是用棧、鏈表、數組等等實現,都有現成的演算法,你參考下就好了。
你的源碼裡面有很多不規范的地方,例如:
1、判斷隊列為空的方法一般都是用front=rear;
2、按你的思路rear->next永遠都應該等於NULL,即隊尾為空,用它判斷隊列是否為空是不對的。
3、
linkshow()函數,判斷隊列到隊尾用q!=NULL也不規范,q是個結構體。
4、linkshow()函數,輸出的應該為q->data。
5、你定義了p,
front,
rear為全局指針變數,函數就不需要帶參數了。
另外,還有不少邏輯錯誤,所以最好參考其他已有演算法(教科書),重新編寫你的程序。如果你想用自己的演算法,就要解決好以下幾個問題:
1、新加隊列元素,需要開辟內存空間
2、注意判斷隊列為空的演算法,不要遺漏當只有一個隊列元素時候的輸出顯示問題(按你的思路,隊列只有一個元素時,其next也為空)
Ⅱ c語言編寫程序後,為什麼執行時自動關閉
出現這種情況與溢出造成的有關 ,可以設置斷點觀察下,在哪裡自動關閉。常見的容易溢出的原因是第一個是數組下標越界,第二個是除數為0當然還有其他的。
常見的原因因為程序沒有設置暫停,運行完了之後,就自動關閉。可以在程序最後加上getchar();或者 system(pause)。實現程序暫停的效果。
pause是cmd中的一個命令,通過system函數調用執行。這樣程序會在執行這個之後結束,換句話說就是按任意鍵退出,而不會直接退出。
(2)c程序編譯成功後運行閃退擴展閱讀
C語言的運算非常靈活,功能十分豐富,運算種類遠多於其它程序設計語言。在表達式方面較其它程序語言更為簡潔,如自加、自減、逗號運算和三目運算使表達式更為簡單;
初學者往往會覺的這種表達式難讀,關鍵原因就是對運算符和運算順序理解不透不全。當多種不同運算組成一個運算表達式,即一個運算式中出現多種運算符時,運算的優先順序和結合規則就會顯得十分重要。
關鍵字又稱為保留字,就是已被C語言本身使用,不能作其它用途使用的字。例如關鍵字不能用作變數名、函數名等標識符。
數據類型關鍵字:
short:修飾int,短整型數據,可省略被修飾的int。(K&R時期引入)
long:修飾int,長整型數據,可省略被修飾的int。(K&R時期引入)
long long:修飾int,超長整型數據,可省略被修飾的int。(C99標准新增)
signed:修飾整型數據,有符號數據類型。(C89標准新增)
unsigned:修飾整型數據,無符號數據類型。(K&R時期引入)
restrict:用於限定和約束指針,並表明指針是訪問一個數據對象的初始且唯一的方式。(C99標准新增)
復雜類型關鍵字:
struct:結構體聲明。(K&R時期引入)
union:聯合體聲明。(K&R時期引入)
enum:枚舉聲明。(C89標准新增)
typedef:聲明類型別名。(K&R時期引入)
sizeof:得到特定類型或特定類型變數的大小。(K&R時期引入)
inline:內聯函數用於取代宏定義,會在任何調用它的地方展開。(C99標准新增)
Ⅲ 新手學C問題:為什麼我的C語言程序老是閃退
在return 0; 前加一條語句 getchar();
Ⅳ c語言程序執行一閃而過怎麼辦
可以在程序結尾使用system("pause");語句阻止窗口消失。
system("pause");的頭文件為#include<stdlib.h>
#include<stdio.h>
#include<stdlib.h>
void to_upper_str( char *str ) //子函數
{
while( *str )
{
if( *str >='a' && *str<='z' )
*str -= 32;
str++;
}
}
int main(){
char str[11] ;
printf("請輸入10個英文字元: ");
scanf("%s",str);
str[10]='