1. 程式人生 > >淺談c語言中的易錯點

淺談c語言中的易錯點

1、printf中字串過長時需要折行書寫使得程式更加易讀

printf("隨便打的話隨便打的話隨便打的話隨便打的話隨便打的話");

用下面的方式直接折行會報錯

printf("隨便打的話隨便打的話隨便打的話
隨便打的話隨便打的話");

①用”” “”字串分成幾段中間回車折行。

printf("隨便打的話"
"隨便打的話");

②加\用回車折行。

printf("隨便打的話\
隨便打的話");

③用多句printf書寫。

printf("隨便打的話");
printf("隨便打的話");

2、為防止資料精度不符合要求要善於應用格式控制符如%m.nf
示例中是將資料四捨五入到到小數點後七位然後輸出

    x=s*10000000+0.5;
    s=x/10000000.0;
    printf("lf",s);

但是輸出來的資料只有小數點後的六位。
這是因為如果不加精度限制編譯系統預設輸出小數點後6位。正確格式應為:printf("%.7lf",s);

3、在使用scanf和getchar前最好清空快取區

   do
    {
        scanf("%s",a);
        printf("Continue?\n");
        m=getch();
    }while(m!='n'&&m!='N');

如果使用者在提示語Continue後輸入字元過多將會跳過scanf直接讀取緩衝區。因為scanf會先讀取緩衝區的內容。所以應當在scanf前加:

fflush(stdin);

4、使用strcat連線字串時應對被連線字元陣列賦值。

char* a[] = {"stay ","here ","for a lifetime"};
char b[1000] ;
for(i=0;i<a;i++)
        strcat(b,a[i]);

如上程式會在執行時提示空指標錯誤。應先賦值在進行連線操作。

char* a[] = {"stay ","here ","for a lifetime"};
char b[1000] ;
strcpy(b,a[0]);
for(i=1;i<a;i++)
        strcat(b,a[i]);

5、運算子的優先順序。

1級優先順序(左結合)
() 圓括號;[]下標運算子;->指向結構體成員運算子;. 結構體成員運算子。

2級優先順序(右結合)
!邏輯非運算子;~按位取反運算子;++字首增量運算子;–字首減量運算子;+正號運算子;-負號運算子;(型別)型別轉換運算子;*指標運算子;&地址運算子;sizeof長度運算子。

3級優先順序(左結合)
*乘法運算子;/除法運算子;%取餘運算子。

4級優先順序(左結合)
+加法運算子;-減法運算子。

5級優先順序(左結合)
<<左移運算子;>>右移運算子。

6、當一些較老版本的編譯器不支援long long時可以使用__int64 來定義64位長整型。
一般來說,64位整型的定義方式有 long long 和 __int64 兩種(VC 6.0 只還支援__int64),而輸出方式也有 printf(“%lld”, a)、printf(“%I64d”, a)、cout << a 三種。在C99標準中,增加了對64位長整型資料的支援,它的型別就是 long long,佔用8個位元組。由於C99標準釋出較晚,一些較老的C/C++編譯器不支援。

    __int64 x;
    long n;
    scanf("%d",&n);
    x=(1+n)*n/2;
    printf("%I64d",x);

以上示例為vc6.0的編譯環境下的64位長整型的使用方式。

這裡討論的是五種常用的C/C++編譯器對64位整型的支援,它們分別是gcc(mingw32)、g++(mingw32)、gcc(linux i386)、g++(linux i386)、Microsoft Visual C++ 6.0。可惜的是,沒有一種定義和輸出方式的組合能同時相容這五種編譯器。
這裡寫圖片描述

7、main()函式的返回型別必須是int型。
儘管在C89標準的main()函式是可接受的,但最新的C99標準只定義瞭如下兩種可接受的函式原型:

int main ( void )
int main ( int argc, char *argv[] )

void main 主函式沒有返回值,main 預設為int 型,即 int main(), 返回整數。注意,新標準不允許使用預設返回值,即int不能省,而且對應main函式不再支援void型返回值,因此為了使程式有很好的移植性,強烈建議使用:

int main( void )
    {
        return 0;
    }`

8、scanf連續錄入資料的兩種方式

scanf("%d%d%d",&a,&b,&c);
scanf("%d,%d,%d",&a,&b,&c);

以上兩種方式均可以實現資料的連續錄入,但是使用第二種方式時錄入的資料間輸入的不是空格而是逗號運算子。

                                                 by Riddle   

相關推薦

c語言

1、printf中字串過長時需要折行書寫使得程式更加易讀 printf("隨便打的話隨便打的話隨便打的話隨便打的話隨便打的話"); 用下面的方式直接折行會報錯 printf("隨便打的話隨便打的話隨便打的話 隨便打的話隨便打的話"); ①用””

C#語言的各種數據類型,與數據類型之間的轉換

優化配置 line com 歸類 浮點 初學者 結構 ali 順序 什麽是數據類型? 數據類型,百度百科是這樣解釋的:數據類型在數據結構中的定義是一個值的集合以及定義在這個值集上的一組操作。這樣的解釋對於一個初學者來說未必太過於深奧。 簡單點說,數據類型就是不同長度的數據的

C語言的兩種語句

我們都知道學習C語言都會遇到兩種常見的語句:選擇語句,迴圈語句。今天就讓我們一起來簡單看看這些語句的特點及功能吧! 選擇語句 if語句,用來實現兩個分支的選擇結構。 switch語句,用來實現多分支的選擇結構。 比如這裡有一個選擇語句: #include&

C語言的布林(bool)型別

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C 語言的結構體【struct】與聯合體【union】

## C語言中結構 struct 與聯合 union 語法基本一致,如下以 struct 為例 一、struct 的基本用法 struct student {     int num;     char* sex; &nbs

C語言文字檔案與二進位制檔案

C語言中,按檔案中的資料組織形式來分,資料檔案可分為ASCII碼檔案(即文字檔案)和二進位制檔案。 文字檔案在磁碟中存放時每個字元對應一個位元組,用於存放對應的ASCII碼。 二進位制檔案把資料按其在記憶體中的儲存形式存放在磁碟上,一個位元組並不一定對應一個字元。 對於A

C語言的聯合體

      當多個數據需要共享記憶體或者多個數據每次只取其一時,可以利用聯合體(union)。在C Programming Language 一書中對於聯合體是這麼描述的:      1)聯合體是一個結構;      2)它的所有成員相對於基地址的偏移量都為0;      3)此結構空間要大到足夠容納最"寬

C語言如何取隨機數

1. 基本函式在C語言中取隨機數所需要的函式是:int rand(void);void srand (unsigned int n);rand()函式和srand()函式被宣告在標頭檔案stdlib.h中,所以要使用這兩個函式必須包含該標頭檔案:#include <

C語言的堆

作業系統堆管理器管理: 堆管理器是作業系統的一個模組,堆管理記憶體分配靈活,按需分配。 大塊記憶體:   堆記憶體管理者總量很大的作業系統記憶體塊,各程序可以按需申請使用,使用完釋放。 程式手動申請&釋放:   手工意思是需要寫程式碼去申請

C語言的記憶體對齊

先看一下下面兩段程式碼: 1:#include int main(){       struct st{              short a;              int b,c;              char d;       };       printf("%d",sizeof(st

C語言字符串結束符'

單獨 lan 數組 targe 情況 包括 span htm ext 如果你希望你的字符串以’\0‘結束,那麽你可以這樣做: 1 char str[]={"hello"};//①字符串賦值 2 char str[]={‘h‘,‘e‘,‘l‘,

編程之美,讓美國人科技高速發展,C語言帶給美國的變化

c99 開發者 追蹤 n) 再次 故障排查 最新 gen 內部數據   我去年7月份有幸應美國朋友的邀約,在美國眾多正在飛速發展中的高科技型企業暢遊了一番。本來我以為,美國只有Google公司,蘋果公司,FaceBook,IBM,微軟,思科這些巨型的高新技術企業在世界的新技

C語言

作為一個剛入坑學習C語言的萌新,對C語言也有了一個初步的認識。現在,筆者將分享一下學習C語言的這麼些日子裡對C語言的認識。迴圈結構,順序結構,以及選擇結構是結構化程式設計的基本結構。在我們剛剛學習C語言並用之敲程式碼的時候時常要用到這三種結構。其實對於這三種結構,書上的講述已經十分清楚了,讀者也能十

C++基礎知識和易混淆總結匯總(不定時更新)

以下是我本人不定時更新的易錯點彙總,如需轉載,請註明出處。 1、對指標的引用 int a = 10; int *p = &a; //初始化指標p。 int* &pa = p; //這個是對指標p的引用、在我們使用pa的操作。相當於對p的操作 2、函

C語言指標 知識

(1) char *sptr="abc",*ptr; *ptr=sptr; 編譯時錯誤。 原因: *ptr是一個字元,sptr是一個指向字元的指標,程式碼試圖將一個字元指標賦值給一個字元,很

C++ 筆試題總結(類和物件)

1、建構函式的意義:(1)由於類的部分成員是私有的,若程式需要對其進行初始化,只有通過成員函式實現。(2)在宣告物件時自動呼叫建構函式。2、建構函式沒有返回值,但不被宣告為void,即沒有宣告型別。3、每次建立類物件(甚至使用 new 動態分配記憶體時,C++都會使用建構函式

c#語言的類,事件,物件,方法和函式的區別

在討論這些關係之前讓我們先來了解一下面向過程和麵向物件的區別: 所謂面向過程就是把一切事物或者需要解決的問題都當做是一個過程來處理,而面向物件則是把一切事物當成一個一個的物件來處理,這兩者有什麼區別呢,舉一個簡單的例子: 編寫一個駕駛汽車的程式: (1)面向過程的程式設計:

c語言typedef 與結構體指標(個人小經驗)

 #include<stdio.h> #include<string.h> typedef struct emp{  char sex[8];  char name[15];  int age; }*emp;//這裡我們用typedef把emp這

想當黑客?C語言程式設計:不會這個知識就別想了!

淺談C語言資料結構——鏈式堆疊 看到標題點進來的朋友,應該對黑客這個名詞很敏感吧?我想應該是這樣的,但是你們知道作為一名黑客需要學習哪些知識嗎?小編不是什麼大佬,但小編可以明確的告訴你,學習C語言是必不可少的一步,為什麼?因為C語言是一個非常“底層”的語言,也是應用最廣泛的

C語言犯的BUG收集

是否遇到過寫C時邏輯正確,語法正確,但還是莫名其妙的出錯,可能是下面的原因造成的: 1.第二行會被當成註釋,原因是”在C中,“\” 代表此行沒有結束,於是,後面的程式碼也成了註釋。“ // Microsoft's version of tmpfile() crea