关于有符号和无符号整数表达式之间的比较

时间:2015-03-16 12:43:23

标签: c

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

int main() 
{
    char a[10],b[10]; 
    int i,j,n=0,m=0; 

    scanf("%s %s",a,b); 

    for(i=0;i<strlen(a);i++) 
        n+=a[i]; 

    for(i=0;i<=strlen(b);i++) 
        m+=a[i]; 

    printf("%d",n*m); 

    return 0;
}

输入123 45表示输出54(来自(1 + 2 + 3)*(4 + 5)),但它不是 帮助

在第8行和第9行,它显示了有符号和无符号整数表达式之间的比较,我得到了错误的awnser

输入123 45表示输出54(来自(1 + 2 + 3)*(4 + 5)),但它不是 帮助

2 个答案:

答案 0 :(得分:2)

而不是这两个循环

for(i=0;i<strlen(a);i++) n+=a[i]; 
for(i=0;i<=strlen(b);i++) m+=a[i]; 
         ^^                  ^^^^

for ( i = 0; a[i] != '\0'; i++ ) n += a[i] - '0'; 
for ( i = 0; b[i] != '\0'; i++ ) m += b[i] - '0'; 

考虑到函数scanf与字符串一起使用时是不安全的。另外,您应该检查下一个字符是否为数字,例如使用标准C函数isdigit

对于编译器消息,函数strlen的返回类型size_t是一些无符号整数类型。您正在将strlen返回的值与您声明为类型i的变量signed int进行比较。因此,编译器会警告比较的结果可能不是您所期望的,因为变量i将转换为size_t类型的右值

答案 1 :(得分:-1)

strlen 是返回 size_t,您应该转换为 int。像这样更改您的代码:

for(i=0;i<(int) strlen(a);i++) n+=a[i];