數據類型:
char:char為一個字節,所以char的unsigned的范圍是0到255,signed類型的話就是-128到127127(-28->27-1);
輸入輸出:%c
int:在32位系統中(現在普遍是int32位),signed的范圍是(-216到215-1),即是-2147483648~+2147483647,unsigned類型 的int 范圍:0~4294967295 即( 0到232-1);
輸入輸出:%d
short int:short int 只有int的一半, 也就是216, 范圍為(0到65536-1)long
輸入輸出:%d
long:long和long int 都是4字節, 要注意:long int的大小和系統是32位還是64位的有關系,事實上,long整型與int能儲存的長度差不多
輸入輸出:%ld
long long int:long long int有8字節, 表示范圍為-263到2的63-1,也就是10的18次方左右
輸入輸出:%lld
float:float占用的內存為4個字節, 和int占用的空間是一樣的, 只是保存的方式不同, float采用的是指數的方式保存數字, 精確度會有問題,儲存長度大概與int相差無幾。(稍微比int大)
輸入輸出:%f
double:double占用的8個字節的內存, 所以表示范圍會比float更大, double保存數值的方式也是為指數保存, 所以也有精確度的問題,表示的長度大概是10的32次方。
輸入輸出:%lf
另外,補充以下:
%e 表示按指數形式的浮點數的格式輸出
%g 表示自動選擇合適的表示法輸出
%u 表示輸出無符號的unsigned(比如unsigned long long int 的輸入輸出形式就是%llu);
printf("%%");這樣才能輸出符號%
cin.get(); 只會讀取鍵盤上的Enter鍵,其他鍵都不管用,因此該語句可以讓程序等待,但是讀入的Enter鍵不被處理
C語言中有專門的暫停語句system("pause");語句在<stdlib.h>頭文件里面,還有exit(0);可以使程序退出。
scanf()函數:
1. scanf 函數是有返回值的,它的返回值可以分成三種情況
1) 正整數,表示正確輸入參數的個數。例如執行 scanf("%d %d", &a, &b);
如果用戶輸入"3 4",可以正確輸入,返回2(正確輸入了兩個變量);
如果用戶輸入"3,4",可以正確輸入a,無法輸入b,返回1(正確輸入了一個變量)。
2) 0,表示用戶的輸入不匹配,無法正確輸入任何值。如上例,用戶如果輸入",3 4",返回0。
3) EOF,這是在stdio.h里面定義的常量(通常值為-1),表示輸入流已經結束。在Windows下,用戶按下CTRL+Z(會看到一個^Z字符)再按下回車(可能需要重復2次),就表示輸入結束;Linux/Unix下使用CTRL+D表示輸入結束。
2. 為什么前面 scanf 的格式串里面,%s和%c中間需要空格呢?
那是因為如果沒空格的話。。。oldchar輸入的就是空格了= =.
3. 順便說一下,printf的返回值是輸出的字符數,例如,printf("1234")的返回值是4,而printf("1234\n")的返回值是5。
-->>總結:就是諸如while(scanf("%s",A)!='\n').......這種寫法是不正確的,因為scanf()函數無法精確的識別讀取到的內容,它只能返回讀到的內容的個數並返回。只有while(scanf("%s",A)!='\n')....這種寫法才能精確的讀到。
而且非常非常重要的一點就是:scanf()函數是以空格或者回車作為結束輸入符號的,也就是打個比方:
#include<cstdio> #include<iostream> #include<cstdlib>
#define N 25253
using namespace std; int main(void) { char A[10]; while(scanf("%s",A)!=' ') { if(A[0]=='+') cout<<"+"<<endl; else { double a=atof(A); printf("%lf",a); } } }
在上面的代碼中,如果輸入11 + :11與+號之間有空格;這樣的話輸出結果就是 11.000000+ 這是因為輸入完了11之后,有了一個空格,這時輸入的11就保存到字符數組A中,之后再輸入的+號就在重新的存入到了數組A中,這時的A[0]其實就是+號。
但是如果輸入11+ :11與+號之間沒有空格,這樣的話輸出就是11.000000 這時因為11與+號之間沒有空格,11+都被同時的存儲到了數組A之中,所以導致沒有重置調用數組A,這樣的話,在經過atof()函數的轉化成double數,+號沒有特定的數字意義,結果就只是11.000000。
當然還有一種方法,例如#作為結束輸入,你可以這樣:
while(1) { scanf("%s",S); if(S[0]=='#') {cout<<"zhongzhi";break;} }
但是如果你把'#'換成’\n‘也達不到用回車作為結束的!
寫在最后:
如果想要了解更多c++的輸入輸出流,重定向問題,可以去看一下ungetc函數,getline(cin,) cin.get(), stream,getchar()等這些函數,博主很懶,如果哪天良心發現了,可能會重新回來更新這篇博文。