【问题标题】:ObjC: Duplicate NSLog() output in the console when reading in char's with scanf()ObjC:使用 scanf() 读取字符时,控制台中的 NSLog() 输出重复
【发布时间】:2012-03-26 07:13:07
【问题描述】:

在这里,我认为我在 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() 中进行相应的格式说明符修改时,程序会按预期在控制台中运行。 (提示用户输入一个字符,打印出该值,然后再次提示。)不过,一旦我回到一个字符,它就会这样做。我究竟做错了什么?此外,无论我输入什么类型的字符,总是有“= 10”输出。这有什么关系?提前谢谢各位。

【问题讨论】:

  • 谢谢,施。我不打算删除“= 10”。只是在我摆脱 NSLog 时间戳时意外删除了它。感谢您接受。

标签: objective-c c ascii scanf


【解决方案1】:

"= 10" 是回车键的 ASCII 码。

所以把你的代码改成:

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

【讨论】:

  • 哇,我很讨厌这个。 :) 谢谢你的帮助。像魅力一样工作,ofc。
猜你喜欢
  • 2014-10-22
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多