如何从Objective-C中的stdin读取多字符串?

问题描述 投票:0回答:1

试图解决需要从stdin读取输入的问题。如果单词之间没有任何空格,我可以使用代码读取标准输入:

输入:

M
Blue 
Balae

码:

NSString *word;
char word_temp[50];
while ( scanf("%s",word_temp) >= 1){   
    word = [NSString stringWithFormat:@"%s", word_temp];
    printf("%s \n",[word UTF8String]);
}

输出(如预期):

M 
Blue 
Balae 

如果输入的单词有空格,则上面的代码会将空格后的单词打印到下一行,因为scanf会将字符读入缓冲区,直到遇到空格或换行符为止。为了解决这个问题,我更改了scanf的格式说明符,以便它应该读入缓冲区,直到它遇到一个新的行字符。

输入:

M
Blue Whale
Balae

码:

NSString *word;
char word_temp[50];
while ( scanf("%[^\n]s]",word_temp) >= 1){       
      word = [NSString stringWithFormat:@"%s", word_temp];
      printf("%s \n",[word UTF8String]);
 }

预期产出:

M
Blue Whale
Balae

实际产量:

// ~ no response on stdout ~

如何读取包含多个单词和空格的行并将其转换为NSString对象?

objective-c scanf stdin
1个回答
0
投票

scanf()不接受正则表达式作为输入模式。

如果要将单行输入作为字符串,可以使用C函数getline()

© www.soinside.com 2019 - 2024. All rights reserved.