2015-05-31 2 views
0

В следующем коде scanf() будет разбить строку на встрече любого пробельных:sscanf() с новой строки в качестве разделителя

char str[] = "Hello I'm Tom"; 

char token1[256]; 
char token2[256]; 
char token3[256]; 

sscanf(str, "%s%s%s", token1, token2, token3); 

Могу ли я сделать это только разбить строку на встрече с новой строки (\n)?

+1

Учитывая, что входная строка, мы должны считать, вы собираетесь проверять результат из 'sscanf' вызова, чтобы узнать, сколько параметров вы на самом деле выполнены (если таковые имеются)? – WhozCraig

+0

'char * sptr = strtok (str," \ r \ n ");' –

ответ

3

Вы можете использовать istringstream::getline

#include <iostream> 
#include <sstream> 

using namespace std; 
int main() 
{ 
    std::istringstream input("Hello I'm Tom\nHello I'm Jim\nHello I'm Tim"); 
    char token1[256]; 
    char token2[256]; 
    char token3[256]; 
    input.getline(token1, 256); 
    input.getline(token2, 256); 
    input.getline(token3, 256); 
    cout << token1 << endl; 
    cout << token2 << endl; 
    cout << token3 << endl; 
    return 0; 
} 
1

Вы можете использовать scanf(), как показано ниже:

scanf("%99[^\n]",comment); 

Но попробуйте использовать fgets вместо этого.

fgets(comment, sizeof comment, stdin); 

Или использовать gets() или getline() функции для чтения строки из stdin.

+0

НИКОГДА не используйте gets(). –

+0

@KlaasvanGend Почему? – Abraham

+0

Потому что вы получите предупреждение в большинстве современных libc. Это предупреждение по какой-то причине: gets() содержит недостаток безопасности. Цитирование man-страницы: «Потому что невозможно сказать, не зная заранее данные, сколько символов будет получать(), и потому что gets() будет продолжать хранить символы за концом буфера, крайне опасно использовать Он используется для разблокировки компьютерной безопасности. Вместо этого используйте fgets(). " –

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