2013-10-28 3 views
0
#include <iostream> 
#include <cstdlib> 
#include <cstring> 
#include <ctype.h> 
#include <cmath> 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
char buffer[100]= {}; 
int length = 0; 

cout << "Enter a string: "; 

do 
{ 
    cin >> buffer; 
} 
while(cin.eof()); 

length = strlen(buffer); 
int squareNum = ceil(sqrt(length)); 

cout << squareNum; 
cout << buffer; 

} 

В основном, я пытаюсь заполнить массив символов строкой, которую я вводил. Однако я считаю, что это только запись в массив до появления пробела.Является ли мой ввод правильно написанным для моего массива?

Ex. 
Input: this is a test 
Output: this 

Input:thisisatest 
Output:thisisatest 

Почему это останавливается в пространстве? Я уверен, что это имеет к с .eof петли

ответ

1
while(cin.eof()); 

Это не вероятно, что вы на EOF() после прочтения одного слова. Вы хотите

while(! cin.eof()); 

или более правильно петля что-то вроде

while(cin >> buffer); 

Или, еще лучше, обойтись без символьных массивов и использовать string и getline.

0

Вы можете использовать std::getline(), чтобы получить каждую строку Е.Г.

std::getline (std::cin,name)

Поступая, что ваш вклад не будут разделены пробелами разделителем

0

Вместо использования cin.eof(), почему бы вам не попробовать что-то вроде:

std::string a; 

while (std::getline(std::cin, a)) 
{ 
    //... 
} 
Смежные вопросы