2017-06-02 55 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;