2016-08-28 1 views
0

Для сканирования полной строки из файла в C++:Сканирования полной линии из внешнего файла в C++

, когда я использую inFile >> s; где s является строкой и входной_файл внешним файла, он просто чтением первое первое слово из строки.

Полный код: (Я просто пытаюсь сканировать файл построчно и распечатать длину линий.)

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

using namespace std; 

int main() 
{ 
ifstream inFile; 
inFile.open("sample.txt"); 
long long i,t,n,j,l; 
inFile >> t; 
for(i=1;i<=t;i++) 
{ 
    inFile >> n; 
    string s[n]; 
    for(j=0;j<n;j++) 
    { 
     getline(inFile,s[j]); 
     l=s[j].length(); 
     cout<<l<<"\n"; 
    } 
} 
return 0; 
} 

Sample.txt

2 
3 
ADAM 
BOB 
JOHNSON 
2 
A AB C 
DEF 

Первое целое тест с последующим ни одним из будущих слов.

+0

использование 'станд :: getline' вместо –

+0

http://www.cplusplus.com/reference/fstream/ifstream/open/ – macroland

+0

' входной_файл >> т; 'читает в' long long' Он не читается в хвостовом конце линии. Это приведет к большому горе позже. Две рекомендации: 1. Не смешивайте '>>' с 'std :: getline' и 2. используйте более надежные имена. Я не могу потрудиться, чтобы отлаживать суп из алфавита. – user4581301

ответ

1

Используйте функцию std :: getline; это было сделано для этой конкретной цели. Вы можете прочитать об этом here. В вашем конкретном случае, код будет:

string s; 
getline(infile, s); 
// s now has the first line in the file. 

Для сканирования всего файла, вы можете поместить GetLine() в цикле в то время, так как он возвращает ложь в конце файла (или, если плохой бит читать). Таким образом, вы могли бы сделать:

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

using namespace std;  

int main() { 
    ifstream inFile; 
    inFile.open("sample.txt"); 
    int lineNum = 0; 
    string s; 
    while(getline(infile, s) { 
     cout << "The length of line number " << lineNum << " is: " << s.length() << endl; 
    } 
    return 0; 
} 
+0

Но если есть целое число для сканирования, мы должны смешать '>>' с 'std :: getline' na ?? –

+0

@SaurabhShubham После того, как вы используете getline(), чтобы получить строку в строке s, вы можете использовать поток строк, чтобы разделить его, используя операторы извлечения потока («>>»). [Здесь] (http://stackoverflow.com/questions/20594520/what-exactly-does-stringstream-do) является примером – gowrath

Смежные вопросы