我正在尝试编写一个程序,该程序读取文件并汇总所有介于0到9之间的数字,以便它可以将数字6识别为6,将数字12识别为1和2等。这是代码,通常汇总从0到9的数字,但以欺骗性方式汇总类似12的数字。例如,我给atoi函数指针指向1,并且atoi返回数字12而不是1,然后返回2,因此该数字之和为用14代替3.不知道为什么会发生!感谢大家提供富有成效的解决方案。
void sumNumbers(FILE *INCOME_stream)
{
char defaultNumbers[]={'0','1','2','3','4','5','6','7','8','9'};
char* defNum_ptr=defaultNumbers;
char stream_string[maxLength];
char* stream_string_ptr=stream_string;
while(fgets(stream_string_ptr,maxLength,INCOME_stream)!=NULL)
{ int numb=0;
int stringLength=strlen(stream_string_ptr);
for(int z=0;z<stringLength;z++)
{
for(int h=0;h<sizeof(defaultNumbers);h++)
{
if(*(stream_string_ptr+z)==*(defNum_ptr+h))
{
numb+=atoi(stream_string_ptr+z);
}
}
}
printf("sum=%d ",numb);
}
答案 0 :(得分:0)
请记住,数组已经是指针,这是我的建议:
使用strtol扫描字符串,因为endptr功能可以完美地实现此目的
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define maxLength 20
void sumNumbers(FILE *INCOME_stream)
{
char stream_string[maxLength];
while(fgets(stream_string, maxLength, INCOME_stream) != NULL)
{
int numb = 0;
int app;
int stringLength = strlen(stream_string);
char *endptr = stream_string;
while( endptr - stream_string < stringLength - 1)
{
app = strtol( endptr, &endptr, 10);
if( app >=0 && app < 10)
numb += app;
}
printf("sum=%d ", numb);
}
}
int main()
{
sumNumbers( stdin);
return 0;
}