ObjC:使用scanf()读取char时控制台中的重复NSLog()输出

时间:2012-03-08 19:47:15

标签: objective-c c ascii scanf

在这里,我以为自己能够胜任ObjC,而这个小C型问题让我很适合。 :)此程序用于读取用户输入的字符并打印一个表达式,该表达式给出字符的十进制值。这个程序正在生成重复的NSLog()语句,我无法弄清楚原因:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

char a;

for (int i = 1; i <= 10; i++)
{
    NSLog(@"Type in an ASCII character or type 'command-.' to exit.");
    scanf("%c", &a);
    NSLog(@"%c = %d", a, a);
}

[pool drain];
return 0;
}

这是输出:

Type in an ASCII character or  type 'command-.' to exit.
a
a = 97
Type in an ASCII character or type 'command-.' to exit.
 = 10
Type in an ASCII character or type 'command-.' to exit.

当我将读入变量从char更改为int并在scanf()中进行相应的格式说明符修改时,程序将按照预期在控制台中运行。 (提示用户输入一个字符,打印出值,然后再次提示。)一旦我回到char,它就会这样做。我究竟做错了什么?此外,无论我输入什么类型的char,总是有“= 10”输出。这有什么用?先谢谢你们。

1 个答案:

答案 0 :(得分:1)

"= 10"是回车键的ascii代码。

所以将代码更改为:

scanf("\n%c", &a);