0

结果代码只打印出我的 Xcode 中数组的第一个元素,即使我传递了三个单词。有什么理由吗?

char str[100] = {0};

        NSLog(@"Please enter three words: ");
        scanf("%s", str);
        NSString *words = [NSString stringWithUTF8String: str];

        NSMutableArray *mutableWords = [[words componentsSeparatedByString: @" "] mutableCopy];

        NSLog(@"%@", mutableWords);
4

3 回答 3

0
fgets(str, sizeof(str), stdin);    

这会将整行读入str.


摆脱'\n'作为数组最后一个索引的字符的最简单方法是简单地更改拆分数组的方式:

NSMutableArray *mutableWords = [[words componentsSeparatedByCharactersInSet:
    [NSCharacterSet whitespaceAndNewlineCharacterSet]] mutableCopy];
于 2013-11-14T03:12:58.083 回答
0

s 匹配一系列非空白字符;next 指针必须是指向 char 的指针,并且数组必须足够大以接受所有序列和终止 NUL 字符。输入字符串在空白处或最大字段宽度处停止,以先发生者为准。

来自 man scanf。

我猜你首先得到了字符串中的第一个单词。顺便说一句,以这种方式使用 scanf 是非常不安全的。

于 2013-11-14T03:10:42.617 回答
0

因为你正在读一个单词scanf("%s", str);

来自http://www.cplusplus.com/reference/cstdio/scanf/

任意数量的非空白字符,在找到的第一个空白字符处停止。终止的空字符会自动添加到存储序列的末尾。

使用getline读取整行

于 2013-11-14T03:11:30.167 回答