как избежать «+» - «ваншинг, но бессмысленно? - PullRequest
0 голосов
/ 05 октября 2019
unsigned u;
int i = scanf("%u",&u);
int c = getchar();
printf("%d is %u%c",i,u,c);//unsigned still has a type like orignal type
return 0;

вход

+

выход

0 is 4198579'\n'

'\ n' - вот что я добавляю.
Так как избежать '+' '-' vanshingно бессмысленно?
Если я хочу получить комплексный тип чисел, как классифицировать "+ i", "- i" и "-888"?
scanf ("% d"), если он ложный, '+' '-' убираются, -я не может быть правильно представлена.

1 Ответ

0 голосов
/ 05 октября 2019
int i = scanf("%u",&u);

Вы должны инициализировать u с некоторыми значениями или по крайней мере предоставить некоторые значения для scanf. Если вы не вводите данные во время сканирования, тогда u - неинициализированная локальная переменная со значением мусора. Также используйте fgets вместо scanf, который считается более безопасным.

0 is 4198579'\n'

Пожалуйста, прочитайте,

Использование символов, читаемых scanf (), в качестве операторов C

Даже getchar () не помогает. Для этого вам нужно написать собственный синтаксический анализатор.

Или, если вы просто хотите, чтобы знаки печатались, попробуйте использовать ASCII,

#define PLUSSIGN 43


unsigned int u = PLUSSIGN;
printf("%d is %u%c",i,u,c);

Другие способы включают использование перечислимого типа для определения знаков с ASCII. ценности. Это помогает, если вы хотите программно использовать знак в зависимости от некоторых входных данных, или вы можете просто использовать их как строку (самый простой способ) в операторе switch. Выберите любой из методов в зависимости от того, что вы пытаетесь выполнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...