2012-12-26 67 views
0
5 1256 4323 7687 3244 5678 
2 2334 7687 
5 2334 5678 6547 9766 9543 

我應該輸入上面的表格。每行中的第一個整數決定後面的整數數量。由於第一個整數可以變化,我不知道'scanf'是否可能。空格在單行上分隔多個輸入

+1

'scanf'是一個C函數 - 如果這是一個C++程序,那麼你可能想使用C++ I/O習語。 –

+0

爲什麼要使用'scanf'而不是'std :: cin'? –

+0

我並不侷限於'scanf'。我提到它,因爲我用它來分隔空白的輸入。但是由於每條生產線的輸入數量不同,我不知道該怎麼做。 –

回答

3

當然,您可以使用scanf進行如下操作。

while (scanf("%d", &n) == 1) { 
    row++; 
    for (col = 0; col < n; col++) 
    scanf("%d", &a[row][col]); 
} 

它更具有cin相同:

while (cin >> n) { 
    row++; 
    for (col = 0; col < n; col++) 
    cin >> a[row][col]; 
} 

更具體的例子,假設輸入的是最大N線。

int** a = new int*[N]; 
int row = -1; // not started yet 
while (cin >> n) { 
    row++; 
    a[row] = new int[n]; 
    for (int col = 0; col < n; col++) 
    cin >> a[row][col]; 
} 

如果N是事先不知道的,我們也可以利用std::vector如下。

vector<vector<int> > a; 
while (cin >> n) { 
    vector<int> line(n); 
    for (int col = 0; col < n; col++) 
    cin >> line[col]; 
    a.push_back(line); 
} 
+0

謝謝。 在哪裏初始化「行」? 'cin'表單是否需要空格分隔的輸入? –

+0

@HarishVishwakarma當然。 'cin'輸入由空格隔開的輸入,包括行尾。 –

+0

@HarishVishwakarma此外,我用更具體的例子更新了我的答案。 –

0

我永遠不會得到你爲什麼不想在Stackoverflow.com上搜索!它被回答了很多次。例如 -

#include <iostream> 
#include <sstream> 
#include <fstream> 
#include <string> 

int main() 
{ 
std::ifstream data("test.txt"); 

std::string line; 
while(std::getline(data,line)) 
{ 
    std::stringstream lineStream(line); 
    std::string  cell; 
    while(std::getline(lineStream,cell,' ')) 
    { 
     std::cout<<cell<<std::endl; 

    } 
    } 
} 
相關問題