在用atof()進行轉換時,若系統的小數點設定為非“.”,如設定為逗號,當系統語言為中文時沒有問題,但是若系統語言改為英文就會回傳錯誤的結果,有人遇到過類似問題或知道有可能的原因嗎?謝謝了
uj5u.com熱心網友回復:
工程是Unicode字符集的嗎?uj5u.com熱心網友回復:
不是的
uj5u.com熱心網友回復:

#include <stdio.h>
#include <ctype.h>
#include <string.h>
char token_buf[128];
int state;
int start;
char cbuf[128];
int forward = -1;
void back(){
forward --;
}
void next(){
forward ++;
}
char* gettoken(){
int i,j=0;
for(i = start; i <= forward; i ++){
token_buf[j++] = cbuf[i];
}
token_buf[j] = '\0';
return token_buf;
}
char nextchar(){
forward ++;
return cbuf[forward];
}
char* nexttoken(){
char c;
state = 12;
while(1){
switch(state){
case 12:
c = nextchar();
if(c == '-' || c == '+')
start = forward;
else if(isdigit(c)) {
if (start == -1) start = forward;
state = 13;
} else {
start = -1;
next();
}
break;
case 13:
c = nextchar();
if(isdigit(c))
state = 13;
else if(c == 'e'||c == 'E')
state = 16;
else if(c == '.')
state = 14;
else
state = 19;
break;
case 14:
c = nextchar();
if(isdigit(c))
state = 15;
break;
case 15:
c = nextchar();
if(isdigit(c))
state = 15;
else if(c == 'e'|| c == 'E')
state = 16;
else
state = 19;
break;
case 16:
c = nextchar();
if(isdigit(c))
state = 18;
else if(c == '+' || c == '-')
state = 17;
break;
case 17:
c = nextchar();
if(isdigit(c))
state = 18;
break;
case 18:
c = nextchar();
if(isdigit(c))
state = 18;
else
state = 19;
break;
case 19:
back();
return gettoken();
}
}
}
int main(){
fgets(cbuf,128,stdin);
if('\n'==cbuf[strlen(cbuf)-1]) cbuf[strlen(cbuf)-1]=0;
while(1){
start = -1;
printf("%s\n",nexttoken());
if(forward >= (int)strlen(cbuf)-1){
return 0;
}
}
}
//輸入:12.3*********klj12.2e2jj778
//輸出:
//12.3
//12.2e2
//778
//
uj5u.com熱心網友回復:
那就換成unicode字符集試試,中文的字符在英文作業系統下不識別
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/127751.html
標籤:基礎類
下一篇:如何鎖定單獨輪廓
