Objective-c - 获取数组的计数元素

时间:2017-06-04 09:34:45

标签: objective-c

我是一名Objective-C新手,我希望得到一系列字符的元素数。我设法找到了这种方式:

@autoreleasepool {

    char parola[30];
    int c;

    NSLog(@"Write word:");
    scanf("%c",&parola[30]);

    c = sizeof(parola)/sizeof(parola[0]);
    NSLog(@"The word has %i letters",c);

}
return 0;

问题在于它给出了我在数组声明中指定的长度,而不是元素数。 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

那里有一些错误。

  1. 您希望用户输入“单词”,即字符串。然后不要使用%c,它只扫描一个字符,而是%s,它会扫描一个字符串(请注意,这可能意味着用户也会输入空格,或者超过29个字符)。 / p>

  2. 您存储在数组之外。该数组声明为

    char parola[30];
    
  3. 这意味着它可以用值0 ... 29进行索引。但是你的&parola[30]超出数组(在索引30处,它不“存在”)。那不是你想要的。这样做:

    scanf("%s", parola);
    

    希望用户不要输入超过29个字符。

    然后可以使用

    找到字符串的长度
    c = strlen(parola);
    

    所以这就变成了:

    @autoreleasepool {
        char parola[30];
        unsigned long c;
    
        NSLog(@"Write word:");
        scanf("%s", parola);
    
        c = strlen(parola);
        NSLog(@"The word has %ld letters", c);
    
    }
    return 0;
    

    您也可以使用printf

    代替NSLog
        printf("Write word: ");
    

        printf("The word has %ld letters\n", c);
    

    这看起来更干净,因为NSLog()总是显示这些额外的信息,比如

    2017-06-04 12:37:25.758802+0200 SOTest[4718:2690388] 
    

    那就是IMO,简直太丑了。适合日志,但不适合清洁屏幕输出。输出现在变为:

    Write word: Tesla
    The word has 5 letters
    Program ended with exit code: 0