2017-06-02 89 views
1

我寫了這段代碼來獲得一個反向形式的數字。但是,如果我使用任何負面的輸入,它顯示正反向數字。 C中的atoi函數可以處理否定嗎?如何通過使用atoi()獲得負值?

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 
int main(void){ 
char ar[40]; 
char ar2[40]; 
int fnum; 
scanf("%s",ar); 
for(int i=strlen(ar)-1,j=0;i>=0;i--){ 
    ar2[j]=ar[i]; 
    j++; 
} 
fnum=atoi(ar2); 
printf("%d",fnum); 
return 0; 
} 
+2

與你的問題無關,但你在哪裏終止'ar2'?請記住,'char'字符串實際上被稱爲***空終止的**字節字符串*。 –

+0

至於你的問題,在一個包含負數的字符串中,哪裏是負號?倒轉後,負號字符在哪裏? –

+2

你的循環是倒退的。如果輸入的是正數,它也會反向打印。這是故意的嗎?負數將顯示爲正數,因爲'-'發生在字符串的末尾,不被視爲數字的一部分。 –

回答

1

您可以使用strstr(haystack, needle)將其轉換爲負數。

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 

int main(void){ 
char ar[40]; 
char ar2[40]; 
int fnum; 
scanf("%s",ar); 
for(int i=strlen(ar)-1,j=0;i>=0;i--){ 
    ar2[j]=ar[i]; 
    j++; 
} 
if(strstr(ar, "-")) 
    fnum= - atoi(ar2); 
else 
    fnum= atoi(ar2); 
printf("%d",fnum); 
return 0; 
} 
+0

'strstr(ar,「 - 」)'是未定義行爲(UB),因爲'ar2 []'不一定有_null字符終止它。 – chux

2

最後printf,就把這行之前:

if (atoi(ar) < 0) fnum = -fnum;