A. 一個C語言程序,編譯、鏈接都沒問題,但一運行就出錯,高手知道下~~
改好了:
#include <stdio.h>
#include <stdlib.h>
typedef struct dxs
{
int exp,coef;
struct dxs *next;
}oxs,*o_xs;
/*****輸入函數*****/
void build(int i,o_xs pa)
{
int j,sum_oxs,exps=0,coefs=0;
oxs *p;
pa->coef=coefs;
pa->exp=exps;
pa->next=NULL;
p=pa;
printf("輸入第%d個多項式的個數\n",i);
scanf("%d",&sum_oxs);
for(j=sum_oxs;j>0;j--)
{
printf("輸入系數和指數");
scanf("%d%d",&coefs,&exps);
p->coef=coefs;
p->exp=exps;
p->next=pa;
pa=p;
p=(oxs*)malloc(sizeof(oxs));
}
free(p);
}
/*****輸出函數*****/
void show(o_xs pa)
{
while(pa!=NULL)
{
printf("%d\t%d\t",pa->coef,pa->exp);
pa=pa->next;
}
printf("\n");
}
/*****排序函數(升序)*****/
void list_oxs(o_xs pa)
{
oxs tt,tt0;
oxs *p=pa,*q=pa;
tt.coef=p->coef;
tt.exp=p->exp;
while(p!=NULL)
{
while(q!=NULL)
{
if(q->exp<tt.exp)
{
tt0.exp=tt.exp;tt0.coef=tt.coef;
tt.exp=q->exp;tt.coef=q->coef;
q->exp=tt0.exp;q->coef=tt0.coef;
}
q=q->next;
}
tt0.exp=tt.exp;tt0.coef=tt.coef;
tt.exp=p->exp;tt.coef=p->coef;
p->exp=tt0.exp;p->coef=tt0.coef;
p=p->next;
q=p;
}
}
/*****多項式相加函數*****/
void add(o_xs pa,o_xs pb)
{
int sum_coef;
oxs *p,*q,*u,*pre;
pre=pa;
u=pb;
p=pa->next;
q=pb->next;
while((p!=NULL)&&(q!=NULL))
{
oxs *p,*q,*u,*pre;
if(p->exp>q->exp)
{
u=q;
pre->next=u;
u->next=p;
pre=u;
q=q->next;
}
else if(p->exp<q->exp)
{
pre=p;
p=p->next;
}
else
{
sum_coef=p->coef+q->coef;
if(sum_coef==0)
{
u=p;
p=p->next;
free(u);
u=q;
q=q->next;
free(u);
}
else
{
p->coef=sum_coef;
pre=p;
p=p->next;
u=q;
q=q->next;
free(u);
}
}
if(q!=NULL)
{
pre->next=q;
}
}
}
/*****main函數*****/
void main()
{
oxs a,b;
build(1,&a);
list_oxs(&a);
show(&a);
build(2,&b);
list_oxs(&b);
show(&a);
add(&a,&b);
show(&a);
}
B. 初學C語言,寫個字元串排序的程序,編譯鏈接都沒有問題,一運行出錯,各位高手看看能否幫下忙是輸入的問題。
你好,運譽
char *pt_arr[5] = {"wang","cheng","zhang","li","xia"};
pt_arr內的指針指向的是字元串常量,字元串常量存儲在只讀內存區域,你使用gets輸入當然有問題。
你旁帆段需要為數組中每個指轎察針分配內存,而不是簡單的賦值。
比如pt_arr[0] = new char[70];
這樣就不會有問題了。
C. C語言編程時編譯沒有錯誤,運行時卻顯示有一個錯誤。為什麼
不沒有寫max函數的具體定義,在主函數中又要使用這個函數,系統找不到,自然就錯了。你把max函數的定義寫全了,就沒事了。
D. C語言編譯時都沒有錯誤,可是最後輸出時debug error,不能運行,為什麼啊
都不明白首敏你的程序想干什麼???#include<stdio.h>
int main()
{
int m,n,max,min;
scanf("%d%d",&m,&n);
if(m>n)
{
max=m;
min=n;
}
else
{
max=n;
min=m;
}
for(;max%min==0;min--)
printf("%d\n"數毀,min);
return 0;
}
這沒者畢枝有錯了,
E. c語言編譯沒有錯誤,連接有錯誤是怎麼回事
1 編譯階段,執行的是對單個文件的轉茄鉛換,從源代碼轉換成二進制文件。
2 鏈接階段,將每個源文件轉成的二頃納沖進制文件,及相關的系統庫文件共同打包生成可執行文件。
3 從定義上可以看出,鏈接階段,出雀殲現錯誤有兩種可能:
1) 函數中引用了不存在的函數。
2) 編譯環境有問題,導致ld出錯。
F. 用C語言編程程序沒有錯誤為什麼結果不對
程序可以運行並不表示程序就是正確的
編譯和連接都正確,只能說明編譯器對他進行語法等檢查
沒發現他的錯誤而已,而既然運行結果是錯誤的,那就是說明一點
可能是你的演算法設計的不當,不能正確的解決問題,這樣發生的錯誤
是運行期錯誤,在編譯連接的過程不會出錯的,不過幸好,編譯器也為我們
提供了一些解決類似運行期錯誤的一些調試工具,通過debug,進行單步調
試下,觀察變數值,看看是不是你想要的等等解決此類問題,具體如何單步
調試見下面:
不過你先要設置斷點,然後按下面操作
在VC++6.0中的單步調試:
調試重要的幾個鍵:
F9在當前游標所在的行下斷點,如果當前行已經有斷點,則取消斷點.
F5調試狀態運行程序,程序執行到有斷點的地方會停下來.
F10單步執行程序.
CTRL+F10運行到游標所在行.
F11和F10的區別是,如果當前執行語句是函數調用,則會進入函數裡面.
SHIFT+F11跳出當前所在函數.
步驟:
1,保存為c或c++文件
2,根據斷點調試找到錯誤處。
3,採用F10或F11單步調試找到精確的錯誤處。其中f10是跳過函數盜用,f11是進入函數體調試。一般是先用f10,確定函數輸入輸出是否正確(與自己想的一樣),如不一樣,則用f11進入函數體一步一步調試。
4,在調試過程中,肯定得監視程序中的變數。在vc6.0的右下角有一個watch窗口,專門用來設置監視變數。具體怎樣設置自己體會吧。在調試過程中,滑鼠輕輕放在變數上也會顯示該變數的值
5,vc6.0專門為調試設置了工具箱以方便調試的進行,打開的方法如下。右鍵——〉在debug(或調試)選擇項的勾勾上。ok
G. c語言程序編譯時沒錯誤,組建時為什麼出現錯誤
你說的組建錯誤多半是link出錯吧,這個很可能是你安裝的路徑不是默認那個路徑,於是,可能需要你自己修改一下
編譯器
設置,你可以到網上搜一下到底是在什麼地方設置。我記不清楚具體位置了,就是設置
鏈接器
的路徑。在對vc進行設置的那個菜單裡面
找一找
,裡面就有各種路徑設置,包括
頭文件
路徑啊,可執行文件路徑之類的,就在裡面設置到vc下面的bin路徑就可以了。
H. C語言程序在編譯鏈接的時候都沒有問題,在調試的時候出問題了
在 fscanf.c 的銀櫻第54行出錯。
表鋒肆叢達式:stream!=NULL
關於如何您的程序可能會導致斷言失雹叢敗的信息,請參閱Visual C + +文檔
I. 為什麼我寫的C語言程序編譯時沒錯,運行時有錯誤
樓主,你好!編譯沒有錯誤只能說明沒有語法錯誤,並不能說明代碼的邏輯沒有錯!因為編輯器主要是根據c語言的語法來檢查你的代碼有沒有錯!