我正在尝试编写一个程序来读取文件并汇总从 0 到 9 的所有数字,以便它可以将数字 6 识别为 6,将数字 12 识别为 1 和 2 或类似的东西。下面的代码通常总结从 0 到 9 的数字,但有效地总结像 12 这样的数字。例如,我给出指向 1 的 atoi 函数指针,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);
}
最佳答案
请记住数组已经是指针,这就是我的建议:
使用 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;
}
关于c - 阿托到底怎么了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53731063/