1. 純數字輸出錯在哪c語言
錯在c[80]溢出了
char c[80];
你能用的是c[0]到c[79]一共80個單元。
//////////////////////////
#include <stdio.h>
int main() ///為了linux下的兼容性,拋棄void型的main函數吧
{
int i = 0;
const int len = 80; ///用一個變數代替80,到處寫"80"改起來累
char c[len];
while (i < len && (c[len-1] = getchar()) != 10) ///i<len這個是防止c[i]溢出
{
if (c[len-1] >= 48 && c[len-1] <=57)
{
c[i] = c[len-1];
}
++i;
}
///c[i] = 0;使用下標前必須判斷下標的范圍,防止溢出
if (i < len)
{
c[i] = 0;
}
else
{
c[len-1] = 0;
}
printf("%s", c);
return 0;
}
2. c語言按順序插入一個數,我錯在哪
你這演算法都寫錯了,你這是排好序的插入,用二分查找法進行插入。你可以去看看什麼是二分查找法,如果看不懂,再來問我。當然要提高自己的能力還是得動手敲敲代碼,不管是學習還是工作。
3. C語言的問題,到底錯在哪了輸入有的數字答案是對的,輸入有的數字答案就差了1。。。
程序太復雜了,修改如下:
long reverse(long number)
{
long sum;
sum=0;
while( number!=0 )
{
sum=sum*10+number%10;
number/=10;
}
return sum;
}
你的代碼中的問題,估計是pow()的返回值是double,在進行隱式轉換成long時,產生了數據丟失!
4. C語言:規定只能輸入正整數,錯哪了
要滿足你的循環條件,那麼輸入的就不能是整數,但是這個就出現一個問題,比如你輸入一個字母A,由於scanf(「%u」,&num)讀到的是非數值的數據,所以它不會把A從緩沖區中取出賦給num,那麼A就一直停留在緩沖區中,第二次循環,還是讀取A,滿足循環條件,所以你的這個就是死循環。
while(scanf("%u",&num)!=1)
{
while(getchar()!='\n'//把緩沖區的字元全部拿走
continue;
printf("拜託……");
}
5. C語言數字輸入錯誤的判斷
我碰到一位網友,他的思路是
判斷
scanf
的返回值,如果值等於輸入數字的個數,那麼就說明輸入的東西是指定的類型(比如
,x=scanf("%d",&a),如果x=1,說明輸入的確實是整數)
6. c語言輸入兩個數輸出大於等於小於,哪裡錯了
程序沒有錯誤,邏輯和語法都沒有錯
不過兩點注意
1、編譯環境,看你用的vc6,這個編譯環境和dos下的tc有很大的不同,需要修改一些地方才可以。初學者一般是看c基礎,用win-tc這個編譯器比較貼近書中的代碼習慣。建議使用win-tc
2、scanf多個輸入的時候,容易出錯。這個和你操作有關系,看代碼是沒有辦法看出問題的,也是初學者的誤區。
多個輸入時,需要用空格或者逗號隔開這些數據。空格對空格,逗號對逗號,不要搞混了。
建議輸入後,列印出出入的數據看看,是否後面的數據正確被程序讀入。
7. c語言中從鍵盤輸入數據的規律和容易出錯的地方
以下為你收集的c語言輸入數據要點及注意事項
說明: (1)數據輸入是相對計算機內存
(2) 數據輸入使用標准庫函數完成
(3) 數據輸入標准庫函數的原型聲明在stdio.h頭文件中
1、函數getchar函數的功能是從鍵盤上輸入一個字元。
其一般形式為:字元變數=getchar();
getchar函數只能接受單個字元,輸入數字也按字元處理。
輸入多餘的字元存入到鍵盤的緩沖區,若有下一個getchar函數語句,直接從鍵盤的緩沖區讀取。
2、字元串輸入函數gets 格式:
gets (st)
功能:從鍵盤上輸入一個字元串,本函數得到一個函數值,即為該字元數組的首地址。
注意:gets函數並不以空格作為字元串輸入結束的標志,而只以回車作為輸入結束。這是與scanf(「%s」,…)函數不同的。
3、scanf()函數的一般形式
scanf(「格式控制字元串」,地址列表);
地址列表,用來接受數據各變數的地址。
變數的地址表示如下: & 變數名 ,別忘了取地址運算&
其格式字元串的一般形式為:
%[*][輸入數據寬度][長度]類型字元
其中有方括弧[]的項為任選項。各項的意義如下:
1) 類型字元
表示輸入數據的類型,其格式符和意義如下所示:
d 輸入十進制整數
o 輸入八進制整數
x 輸入十六進制整數
u 輸入無符號十進制整數
f或e 輸入實型數(用小數形式或指數形式)
c 輸入單個字元
s 輸入字元串
2) 「*」符
用以表示該輸入項讀入後不賦予相應的變數,跳過該輸入值。
如 scanf("%d %*d %d",&a,&b);
輸入為:1 2 3 把1賦予a,2被跳過,3賦予b。
3)寬度
用十進制整數指定輸入的寬度(即字元數)。
例如: scanf("%5d",&a);
輸入: 12345678
只把12345賦予變數a,其餘部分被截去。
又如: scanf("%4d%4d",&a,&b);
輸入:12345678將把1234賦予a,而把5678賦予b。
4)長度 長度格式符為l和h,l表示輸入長整型數據(如%ld)和雙精度浮點數(如%lf)。h表示輸入短整型數據。
例如:
main()
{ inta;
long b;
double x;
scanf(「%d%ld%lf」,&a,&b,&x);
printf(「a=%d, b= %ld,x=%lf」,a,b,x);
}
使用scanf函數還必須注意以下幾點:
(1)scanf函數中沒有精度控制。
如:scanf(「%5.2f」,&a); 是非法的。
(2)scanf中要求給出變數地址,
如: scanf(「%d」,a);是非法的。
(3)在輸入多個數值數據時,若格式控制串中沒有非格式字元作輸入數據之間的間隔則可用空格,TAB或回車作間隔。
例如:scanf(「%d%d」,&a,&b);
輸入: 12 10 回車
或 12 回車 10 回車
(4)在輸入字元數據時,若格式控制串中無非格式字元,則認為所有輸入的字元均為有效字元。
例如:
scanf("%c%c%c",&a,&b,&c);
輸入為:d e f 則把'd'賦予a, 『』'賦予b,'e'賦予c。
只有當輸入為: def時,把'd'賦於a,'e'賦予b,'f'賦予c。
如果在格式控制中加入空格作為間隔,
如 scanf ("%c %c %c",&a,&b,&c);
輸入時各數據之間可加空格。
(5)如果格式控制串中有非格式字元則輸入時也要輸入該非格式字元。
例如:
scanf("%d,%d,%d",&a,&b,&c);
其中用非格式符「,」作間隔符,故輸入時應為: 5,6,7
又如:
scanf("a=%d,b=%d,c=%d",&a,&b,&c);
則輸入應為: a=5,b=6,c=7
(6)如輸入的數據與輸出的類型不一致時,雖然編譯能夠通過,但結果可能不正確。
void main()
{ inta;
printf("inputa number\n");
scanf("%d",&a);
printf("%ld",a);
}
以上總結比較全面,希望能幫到你。
8. c語言的輸入錯在哪裡
scanf_s函數是微軟為了防止輸入字元時溢出更新的一個函數;
當輸入數值時和原來的scanf函數一樣的用法,如果輸入字元或者字元串就要多傳入一個最大容量的值。
scanf_s("%c,%c", &a, &b);改成
scanf_s("%c,%c", &a, 1, &b, 1);
每個變數都要跟一個最大容量。
9. 求指出C語言代碼哪裡錯了(程序功能:輸入2個數字,按大小排序)
scanf ("%d %d", &a, &b);
第二個%d後不要加空格
10. c語言中數據輸入錯誤了如何提示輸入錯誤並實現要求重新輸入
可以使用清理輸入流fflush(stdin);這個原因是因為錯誤輸入的內容會保留在輸入流,下一次判斷會從輸入流開始讀取,因為錯誤輸入的內容還在,所以直接判斷錯誤,繼續循環。
但有些編譯器並不支持清理輸入流。所以我們這時需要用手動輸入讓其清除。使用getchar();讓其接收錯誤的字元。但這樣就會變成這樣,如果輸入多個錯誤就會出現多個次數的循環;直至沒有錯誤輸入;這樣如果循環內容多,所消耗的資源也就多了。
所以可以使用while()來執行裡面的消除字元,但如果直接這樣while(getchar())就會進入無限循環,所以可以讓其接收一個終止條件,每次輸入完都會按回車,那就讓其接收' '換行符終止自己的循環。
(10)輸入數字c語言錯在哪裡擴展閱讀
C語言從鍵盤輸入數據
程序是人機交互的媒介,有輸出必然也有輸入。在C語言中,有多個函數可以從鍵盤獲得用戶輸入:
scanf():和 printf() 類似,scanf() 可以輸入多種類型的數據。
getchar()、getche()、getch():這三個函數都用於輸入單個字元。
gets():獲取一行數據,並作為字元串處理。
scanf() 是最靈活、最復雜、最常用的輸入函數,但它不能完全取代其他函數,大家都要有所了解。scanf 是 scan format 的縮寫,意思是格式化掃描,也就是從鍵盤獲得用戶輸入。
gets() 會讀取用戶輸入的整行內容,包括空格。而 scanf() 遇到空格就結束讀取,也就是說,使用 scanf() 讀取的字元串中永遠不會包含空格。