我想要修复这段代码有点疯狂。我已经呆了将近两个小时,我找不到什么不对。代码错误(状态机)
这是一个简单的程序,它应该将一些文本作为输入并返回相同的文本,并将所有数字从十进制转换为十六进制基数。
#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;
}
但是,该程序无法正常工作,由于某些原因我不断收到转换为十六进制错误。为什么会发生?非常感谢。
任何错误代码,你是后得到编译你的代码 – mumair
你是什么意思?我没有收到编译错误。 – YoTengoUnLCD
尝试使用'-Wall -Wtratra'进行编译。然而,这不是你问题的原因。 – tonysdg