


本人學C比較菜用了這么麻煩的方法,想問兩個例子同樣第二個數大,為什么一個運行結果正確,另一個錯誤呢??難道和長度有關?但是頭檔案里已經給出了長度范圍啊十分疑惑

把我全部的分都用了
uj5u.com熱心網友回復:

請看此程式上個忘修改了一部分
uj5u.com熱心網友回復:
求幫助啊真的找不到原因了大哭

uj5u.com熱心網友回復:
幾個問題,第一輸入允許負數嗎?第二、因為你貼的是圖,我就沒看你的代碼,
我這里只把我自己的想法,說一下
3個100位大整數,不能直接用語言自帶的整形來處理,所以用字串,
那么如果第一個問題不允許的化,就是直接比較表示整數的字串
3個數比大小很簡單,主要處理的是比較函式。比較函式肯定是兩兩相比
先比較兩個字串的長度,長度大的大。
如果一樣長,從0到N依次比較,直到分出大小。
如果允許負數。那么把負數的邏輯加進去就可以了。
uj5u.com熱心網友回復:
比較負數的邏輯:一正,一負,整數大
二負,大小,與我剛才說的整數比較結果相反。
uj5u.com熱心網友回復:
建議直接貼代碼,貼圖片不好除錯~uj5u.com熱心網友回復:
如果只是單純的比較輸出數,你可以考慮改變變數阿,這樣代碼會少很多,比較函式里面改下,如果給定的可以出來if》=0交換值,這樣就保證了abc是按照一定順序排的,你只需要比較好了把對應的數交換到對應的變數里,輸出就最后輸出一下就行。
你這個有點亂。我眼睛不舒服就不細看了,不過你判斷的{} 是不是沒有對好?好像有個有6個{5個}
uj5u.com熱心網友回復:
不好意思回復晚了,十分感謝您的回復!!!我用的是sscanf,把字串直接轉成數字,不知道這樣會不會造成什么問題,我把代碼貼樓下了uj5u.com熱心網友回復:
#include<stdio.h>int cmp(char *a,char *b);
#include<string.h>
#define N 101
int main()
{
char a[N],b[N],c[N];
gets(a);gets(b);gets(c);
if(cmp(a,b)==1)
{
if(cmp(a,c)>=0&&cmp(c,b)>=0)//a與c比較
{
puts(b);puts(c);puts(a);
}
else if(cmp(c,b)==-1)
{puts(c);puts(b);puts(a);
}
else if (cmp(a,c)==-1)
{puts(b);puts(a);puts(c);
}
}
if(cmp(a,b)==0)
{
if(cmp(a,c)>=0)
{
puts(c);
puts(b);
puts(a);
}
else if(cmp(a,c)==-1)
{
puts(b);puts(a);puts(c);
}
}
if(cmp(a,b)==-1)
{
if(cmp(b,c)>=0&&cmp(a,c)>=0)
{ puts(c);puts(a);puts(b);
}
else if(cmp(a,c)==-1&&cmp(b,c)>=0)
{puts(a);puts(c);puts(b); }
if(cmp(b,c)==-1)
{
puts(a);puts(b);puts(c);
}
}
return 0;
}
int cmp(char *a,char *b)
{
int m,n;
sscanf(a,"%d",&m);
sscanf(b,"%d",&n);
if(m>n)
{
return 1;
}
else if(m==n)
{
return 0;
}
else if(m<n)
{
return -1;
}
}
運行時輸入1 2 3正確,但換成大整數就錯誤了
uj5u.com熱心網友回復:

就像這個排序結果就錯誤了
uj5u.com熱心網友回復:
直接用strcmp就可以了吧轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/93099.html
標籤:C語言
上一篇:有人知道gcc怎么編譯具有c++特性的代碼(比如c++的類和參考)
下一篇:visual咋弄啊拜托
