Магическое число - это прямое использование числа в коде.
Например, если у вас есть (в Java):
public class Foo {
public void setPassword(String password) {
// don't do this
if (password.length() > 7) {
throw new InvalidArgumentException("password");
}
}
}
Это должно быть реорганизовано в :
public class Foo {
public static final int MAX_PASSWORD_SIZE = 7;
public void setPassword(String password) {
if (password.length() > MAX_PASSWORD_SIZE) {
throw new InvalidArgumentException("password");
}
}
}
Это улучшает читаемость кода, и его легче поддерживать. Представьте, что я установил размер поля пароля в графическом интерфейсе. Если я использую магическое число, всякий раз, когда изменяется максимальный размер, я должен изменить в двух местах кода. Если я забуду один, это приведет к несоответствиям.
JDK полна примеров, например, в классах Integer
, Character
и Math
.
PS: Статический анализ инструменты, такие как FindBugs и PMD, обнаруживают использование магических чисел в вашем коде и предлагают рефакторинг.
Распечатываются все значения ASCII:
int main()
{
int i;
i=0;
do
{
printf("%d %c \n",i,i);
i++;
}
while(i<=255);
return 0;
}
, а при этом выводится значение ASCII для данного символа:
int main()
{
int e;
char ch;
clrscr();
printf("\n Enter a character : ");
scanf("%c",&ch);
e=ch;
printf("\n The ASCII value of the character is : %d",e);
getch();
return 0;
}
Самый простой подход в печати значений ASCII данного алфавита.
Вот пример:
#include<stdio.h>
int main()
{
//we are printing the ASCII value of 'a'
char a ='a'
printf("%d",a)
return 0;
}
Попробуйте следующее:
char c = 'a'; // or whatever your character is
printf("%c %d", c, c);
% c - это строка формата для одного символа, а% d - для цифры / целого числа . Приведя char к целому числу, вы получите значение ascii.
Это считывает строку текста из стандартного ввода и распечатывает символы в строке и их коды ASCII:
#include <stdio.h>
void printChars(void)
{
unsigned char line[80+1];
int i;
// Read a text line
if (fgets(line, 80, stdin) == NULL)
return;
// Print the line chars
for (i = 0; line[i] != '\n'; i++)
{
int ch;
ch = line[i];
printf("'%c' %3d 0x%02X\n", ch, ch, (unsigned)ch);
}
}