-3

我编写了一个程序来从一个文件中获取所有电话号码,该文件具有其他文本,例如 at 命令和来自其他子进程的其他错误。在这里,当我尝试使用用户定义的函数将字符串转换为整数时,我遇到了问题。存储在函数中的转换值没有正确返回到主程序,而是返回一些不寻常的值,并且每次执行似乎都是相同的。这让我很惊讶。有人可以给我建议。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char lic[128];
unsigned long long sum=0ULL;

unsigned long long stringtoint(char str[])
{
    int i=0;
    sum=0;
    if(str[strlen(str)]!='\0')
        return -1;
        //puts("Im in function");
    while(str[i]!='\0'){
        //printf("- %c -\n",str[i]);
         if(str[i] >= 48 && str[i] <= 57){
             sum = sum*10 + (str[i] - 48);
             //printf("%c and %llu\n",str[i],sum);
         }
         i++;
    }
    if(sum>0)
    printf("\nIn function passed string is %s and integer value is %llu\n",str,sum);
    return sum;
}


FILE *file;     
int main(){
        //long long int inte;
        int64_t inte;        file = fopen("receive","r"); 
        if(file!=NULL)
                while(fscanf(file,"%s",lic)!=EOF){
                        inte = 0;
                        inte=stringtoint(lic);
                        if(inte !=0){
                                printf("In Main %llu is the value of the string %s",inte,lic);
                        if(inte==sum)
                                printf("\n%llu and %llu are same\n",inte,sum);
                }
        }
        printf("\n");
        fclose(file);
        return 0;
}

下面给出了我为这个程序得到的结果。

在函数中传递的字符串是 8939095683,整数值是 8939095683 在 Main 349161091 中是字符串 8939095683 的值

shadeerariff@shameerariff-Satellite-L450:~/Workinffolder/ivr/IVRReporting$ ./datadecoder

在函数中传递的字符串是 8939095683,整数值是 8939095683 在 Main 349161091 中是字符串 8939095683 的值

shadeerariff@shameerariff-Satellite-L450:~/Workinffolder/ivr/IVRReporting$ ./datadecoder

在函数中传递的字符串是 8939095683,整数值是 8939095683 在 Main 349161091 中是字符串 8939095683 的值

需要您的宝贵意见,提前感谢您的支持。

4

2 回答 2

1

要点 1.你需要改变

int stringtoint(char str[])

unsigned long long stringtoint(char str[])

第 2 点 %lld不是 . 的正确格式说明符unsigned long long。利用%llu

于 2015-02-24T14:41:44.787 回答
1

有人可以给我建议。

是的。不要编写自己的函数,但atoi如果您真的想对char数组进行操作,或者使用该stoi函数来处理std::string,或者使用任何 C++iostream从字符串中读取整数,请使用 C 标准库中提供的函数。使用后者,您基本上可以使用在ifstream使用 C++ 的标准库打开时可以直接获取的文件流。

编辑:我应该提到你不应该使用atoi/ stoi,但是atoll/stroul来实际反映你的数字可能大于int可以容纳的事实。

此外,电话号码不是整数。在许多国家/地区,城市区号以 0 开头,您无法以任何数字类型表示。事实上,电话号码不是数字,而是数字序列,如果你问我的话。

于 2015-02-24T14:42:13.093 回答