2012-06-18 46 views
-1

我正在做一個任務,我輸入的是你想要輸入的次數,然後我用getline輸入一個完整的行,但是sime我無法做到那。getline()一個字符串給予難度

這裏,當我嘗試輸入'1'作爲我的號碼。的測試用例,它立即給出'0'作爲回答,並且出於循環,爲什麼不是這個cin >>測試;這裏與getline(cin,s)兼容;

#include<iostream> 
#include<string> 

using namespace std; 

int main() 
{ 
    int test,j; 
    cin>>test; 

    int len; 
    string s;  
    for(j=1;j<=test;j++) 
    { 
     getline(cin,s); 
     len = s.length(); 
     cout<<len; 

    } 
    return 0; 
} 

難度

input : 
1 
output: 
0 

expected 
input: 
1 
Hello World 
output 
11 

嗯,我混一點點C來到達我的回答

#include<iostream> 
#include<string> 
#include<cstdio> 

using namespace std; 

int main() 
{ 
    int test,j; 
    scanf("%d\n",&test); 

    int len; 
    string s;  
    for(j=1;j<=test;j++) 
    { 
     getline(cin,s); 
     len = s.length(); 
     cout<<len; 

    } 
    return 0; 
} 
+1

@Nawaz:他的意思是輸入。 –

+0

哎你好世界是我的輸入字符串不輸出 – sudhanshu

回答

6

你混合格式的輸入和格式化輸入功能。

operator>>讓你在輸入緩衝區中提取出的號碼後尾隨換行,但這不是後續讀取與operator>>做,因爲它跳過所有閱讀它之前發現空白的問題。另一方面,getline會一直讀取,直到找到分隔符(默認爲\n)而不跳過任何內容。

長話短說:如果你想使用getline你必須清理從\n緩衝您cin>>test;後:

#include <limits> 
// ... 

cin>>test; 
cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
+0

你可以給我從那裏我能理解這個問題 或有任何其他的方式做什麼,我想在C做一個網絡鏈接++不使用限制 – sudhanshu

+0

HTTP:// c-faq.com/stdio/gets_flush2.html,這解釋了關於C的問題。我通常通過在調用getline(或C中的fgets)之前讀取字符的'\ n'來解決這個問題 – rajatkhanduja

0
for(j=1;j<=test;j++)  
{   
getline(cin,s);   
len = s.length();   
cout<<len;  
} 

這是閱讀的int和與一個carridge字符串返回。

它讀取1作爲總和,然後沒有任何字符串(因此長度爲0)。 嘗試1TEST,這應該給你一個長度4.

+0

如果你注意到他將測試寫爲'j <= test',而不是'j

+0

啊公平點 - 我已經修改了答案 – Stefan

0

我相信你的問題是你給輸入流作爲參數,你應該給緩衝區。 試試這個。

{ 
    char szInput[256]; 
    cin.getline(szInput,256); 
    len = strlen(szInput); 
    cout<<len; 
} 
相關問題