#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)),但它不是 帮助
答案 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];