Я немного схожу с ума, пытаясь исправить этот код. Я занимаюсь этим почти два часа и не могу найти, что не так.
Это простая программа, которая должна принимать некоторый текст в качестве входных данных и возвращать тот же текст со всеми числами, переключенными с десятичной системы на шестнадцатеричную.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int revNumber(int);
typedef enum { STATE_WORD, STATE_BLANK, STATE_NUMBER } state_t;
int main()
{
int c;
int readNum = 0;
int writeNum = 0;
int digit = 1;
int sign = 1;
state_t state = STATE_BLANK;
while( (c = getchar()) != EOF )
{
switch(state)
{
case STATE_WORD:
if( isspace(c) )
state = STATE_BLANK;
putchar(c);
break;
case STATE_BLANK:
if(c == '-')
{
sign = -1;
state = STATE_NUMBER;
}
else if( isdigit(c) )
{
readNum += (c - '0') * digit;
digit *= 10;
state = STATE_NUMBER;
}
else if( isspace(c) )
putchar(c);
else
{
state = STATE_WORD;
putchar(c);
}
break;
case STATE_NUMBER:
if( isdigit(c) )
{
readNum += (c - '0') * digit;
digit *= 10;
}
else
{
writeNum = revNumber(readNum);
readNum = 0;
if(sign == -1)
putchar('-');
if(digit > 1)
{
if( isspace(c) )
{
printf("%x", writeNum);
state = STATE_BLANK;
}
else
{
printf("%d", writeNum);
state = STATE_WORD;
}
}
digit = 1;
sign = 1;
putchar(c);
}
break;
}
}
}
int revNumber(int n)
{
int revNum = 0;
while(n != 0)
{
revNum += revNum * 10 + n%10;
n /= 10;
}
return revNum;
}
Программа, однако, работает некорректно, по какой-то причине я все время неправильно конвертирую в шестнадцатеричный формат. Почему это происходит? Большое спасибо.
-Wall -Wextra
. Однако это не причина вашей проблемы. - person tonysdg   schedule 23.11.2015strtok
для проверки каждого отдельного раздела на наличие чисел (т.е. строка включает только числа), а затем проанализировать эти разделы с помощью чего-то вродеsprintf (buf, "%x", atoi ("345"))
? - person tonysdg   schedule 24.11.2015revNumber
функция не работает. Смотрите мой ответ. - person Gillespie   schedule 24.11.2015