我是一名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;
问题在于它给出了我在数组声明中指定的长度,而不是元素数。 有什么想法吗?
答案 0 :(得分:2)
那里有一些错误。
您希望用户输入“单词”,即字符串。然后不要使用%c
,它只扫描一个字符,而是%s
,它会扫描一个字符串(请注意,这可能意味着用户也会输入空格,或者超过29个字符)。 / p>
您存储在数组之外。该数组声明为
char parola[30];
这意味着它可以用值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
:
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