ObjC: дублировать вывод NSLog () в консоли при чтении в char с помощью scanf () - PullRequest
1 голос
/ 08 марта 2012

И тут я подумала, что у меня есть опыт в 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".Что за дело с этим?Заранее спасибо, ребята.

1 Ответ

1 голос
/ 09 марта 2012

"= 10" - это код ascii для клавиши ввода.

Поэтому измените свой код на:

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