K&R exercise 3.5 - C (СИ)
Формулировка задачи:
Упражнение 3.5. Напишите функцию itob(n, s, b), которая переводит целое n в строку s,
представляющую число по основанию b. В частности, itob(n, s, 16) помещает в s текст числа n в
шестнадцатеричном виде.
Аварийный останов. Не понимаю почему.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i, c;
char s[30];
for (i=0; (s[i] = getchar()) != EOF; i++ )
;
s[i] = '\0';
reverse(s);
for (i=0; s[i] != '\0'; i++)
printf("%c", s[i]);
itos(12345, s, 16);
printf('\n');
for (i=0; s[i] != '\0'; i++)
printf("%c", s[i]);
return 0;
}
void itos (int n, char s[], int b)
{
int i = 0,k, sign;
if (n < 0)
{
sign = '-';
n = -n;
}
do
{
n /= b;
k = n % b;
s[i++] = (k > 9) ? (k +'a' - 10) : k;
} while (n > 0);
s[i] = '\0';
reverse(s);
}
void reverse (char s[])
{
int i, j, c;
for (i = 0, j = strlen(s) - 1; i < j; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}Решение задачи: «K&R exercise 3.5»
textual
Листинг программы
while (s<t) { d=*s; *s++=*t; *t--=d;}
Объяснение кода листинга программы
- В данной строке кода присутствует условие
s<t, которое проверяет, что значение переменнойsменьше значения переменнойt. - Если условие выполняется, то происходит присваивание значения переменной
dзначению переменнойs. - Значение переменной
sувеличивается на единицу (s++). - Значение переменной
tуменьшается на единицу (t--). - Значение переменной
tприсваивается значение переменнойs. - Значение переменной
sприсваивается значение переменнойd. - Значение переменной
tуменьшается на единицу (t--). - Значение переменной
tприсваивается значение переменнойd. - Цикл повторяется до тех пор, пока условие
s<tвыполняется.