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);
兩種方式都可以,但是如果用第二種方式進行連續的數據錄入再輸入時數據間不能加空格而是加逗號運算符。