我想要修復這段代碼有點瘋狂。我已經呆了將近兩個小時,我找不到什麼不對。代碼錯誤(狀態機)
這是一個簡單的程序,它應該將一些文本作爲輸入並返回相同的文本,並將所有數字從十進制轉換爲十六進制基數。
#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