当我从main调用函数wordToInt(c)
时,返回值与函数内部的函数不同。
main()
{
long long unsigned item;
char c[6] = "ABCDE";
item = wordToInt(c);
printf("Main The item is :%llu\n",item);
}
long long unsigned wordToInt(char *c)
{
long long unsigned int k,item=0;
int i,len;
int j,p=0;
len = (int) strlen(c);
for(i = len-1;i>=0;i--)
{
if(c[i] == 'c')
j = 42;
else if(c[i] == '*')
j = 99;
else
j = (int) c[i];
j = j%100;
k = pow(100,p);
p++;
item = item + (j*k);
}
printf("Function item is :%llu\n",item);
return item;
}
该计划的输出是:
Function item is :6566676869
Main The item is :18446744071686293893
有人能告诉我为什么输出不一致吗?
答案 0 :(得分:6)
首先 - 注意编译器的警告,它们很重要!
答案 - 因为你在使用它之前没有原型wordToInt()
,编译器警告你它没有原型并且假设函数返回了一个int(小于long long)。所以你得到一个返回的int值,而不是很长的。函数中打印的值是正确的,因为函数知道正确的类型。
答案 1 :(得分:2)
在wordToInt()
之前添加main()
声明,或在wordToInt()
之前添加main()
的正文。无论哪种方式,编译器都会知道wordToInt()
的原型,只有这样才能传递参数并正确返回返回值。
答案 2 :(得分:0)
char数组在给定字符串时总是会自动在字符串末尾添加NULL
字符,因此大小为6
char c[6] = "ABCDE";
当我使用和不使用更改时运行相同的代码时输出是一致的。
对于字母大小6
Function item is :6566676869
Main The item is :6566676869
对于字母大小5
Function item is :656667686803780408
Main The item is :656667686803780408
编辑:我在函数调用之前添加了一个原型。
答案 3 :(得分:0)
我复制并运行了你的程序及其工作。我在两个细分中都找到了相同的结果。我不知道为什么你在主要功能中得到错误的答案。无论如何,这就是我如何做到的。
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<math.h>
long long unsigned wordToInt(char *c)
{
long long unsigned int k,item=0;
int i,len;
int j,p=0;
len = (int) strlen(c);
for(i = len-1;i>=0;i--)
{
if(c[i] == 'c')
j = 42;
else if(c[i] == '*')
j = 99;
else
j = (int) c[i];
j = j%100;
k = pow(100,p);
p++;
item = item + (j*k);
}
printf("Function item is :%llu\n",item);
return item;
}
int main()
{
long long unsigned item;
char c[5] = "ABCDE";
item = wordToInt(c);
printf("Main The item is :%llu\n",item);
getch();
return 0;
}
然后我用MinGW编译它:gcc -c yourFileName.c 然后是可执行文件:gcc -o可执行文件yourFileName.o