輸入的結束方式有:
1. 預先確定長度,無結束符。
2. 標誌文本(如-1 和 0)。
3. EOF文件結束符(C/C++中的符號常量,代表-1,表示文件的末尾)。
Important:
對每組數據進行分別處理。即分組讀入,然後馬上處理。而不是把文件裏的全部數據一次讀入,因爲有時根本不可能。
輸入時的操作需注意:
用cin()時 變量是通過流提取符>>從流中提取數據的,通常跳過輸入流中的 :空格 ,tab鍵,換行符,回車符等,應靈活運用:
get();getline();read();
以下是幾種典型的輸入:
1. 輸入有若干行。每行有一個整數,它是測試數據:
Int n;
While(cin>>n)
{
處理n
}
2. 輸入有若干行。每行有兩個整數a,b,之間有空格隔開。直到文件結束爲止。
Int a,b;
While(cin>>a>>b)
{
..處理a和b
}
3. 輸入有若干組測試數據。每組測試數據由兩行構成,第一行是一個正整數n第二行有n個整數,之間用一個空格隔開。
Const int MAXN = 1000;
Int n,I,a[MAXN];
While(cin>>n)
{
For(i=0;i<n; i++)
{
Cin>>a[i]
}
處理數組a的信息
}
4. 輸入的第一行有一個整數T,表示測試數據的組數,接下來有T行,每行是一個有空格的字符串。
Const int MAXN =1000;
..
Int T;
Char str[MAXN];
Cin>>T;//發現T根本就沒用
Cin.getline(str,10);//吸收數據T(上一行)所在行尾部的信息(比如回車什麼的)
While(Cin.getline(str,MAXN))
{
處理有關str的信息
}
5. 輸入有若干行,每行是一個含有空格的字符串。
Const int MAXN = 1000;
…
Char str[MAXN];
While(Cin.getline(str,MAXN))
{
處理str的信息
}
6. 輸入的第一行是一個整數T,表示T組測試數據。接着是這T組測試數據的描述。每組測試數據有3行,其中第一行是2個整數m,n。第二行有m個整數。第三行有n個整數。每行整數之間有一個空格。兩組測試數據之間有一空行。
。。。
Int T,m,n,I;
Int *a,*b;
Cin>>T;
While(cin>>T)
{
Cin>>m>>n;
a=new int [m+1];
b=new int [n+1];
for(i=0; i<m; i++)cin>>a[i];
for(i=0; i<m; i++)cin>>b[i];
處理數組a和數組b的信息
}
7. 綜合版。輸入的第一行是一個整數T,表示T組測試數據。接着是T行,每行有若干個整數
(可以綜合上述6種方法進行處理)
附帶輸出的一點東西:
輸出時應注意:
輸出的精度!!,寬度!!,行尾是否有空格??!!一組數據後是否有空行??
不常見的輸出函數:
put()函數;
#include<iostream>
using namespace std;
int main()
{
cout.put(‘h’).put(‘e’).put(‘l’).put(‘p’)/put(‘\n’);
return 0;
}
輸出 help換行。
注意put(35);會把35解析成ASCII碼,35對應#;
write()函數:
write(String_address,output_number)有兩個參數第一個是字符串的首地址,就是字符串的名字,第二個是輸出的字符的個數
#include<iostream>
using namespace std;
int main()
{
char ch[]=”hello world”;
int length = strlen(ch);
cout.write(ch,length).put(‘\n’).write(ch,length-6);
return 0;
}
輸出:hello world換行hello
設置寬度,精度,字符填充的方法
字段寬度:
Cout.width(int);隻影響將要顯示的寬度,與setw();一樣
未完待續。。。。
參考資料:ACM/ICPC 程序設計