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

时间:2019-04-28 04:28:43

标签: objective-c scanf stdin

尝试解决需要从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对象?

1 个答案:

答案 0 :(得分:0)

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

如果要以字符串形式输入一行,则可以使用C函数getline()