gpt4 book ai didi

c - 如何从输出文件中删除前导零?

转载 作者:行者123 更新时间:2023-11-30 15:46:02 25 4
gpt4 key购买 nike

我的 getNumber 函数有问题,因为我的输出文件包含零。我认为不应该。我希望我的程序打印所有数字,然后将它们相加。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define CHUNK 12

char *getNumber(FILE *infile);

int main(int argc, char *argv[])
{
char *number, *pEnd;
FILE *infile, *outfile;
int newNumber, sum = 0;

if(argc != 3)
{
printf("Missing argument!\n");
exit(1);
}

infile = fopen(argv[1], "r");
if(infile != NULL)
{
outfile = fopen(argv[2], "w");
if(outfile == NULL)
{
printf("Error, cannot open the outfile!\n");
abort();
}
else
{
while(!feof(infile))
{
number = getNumber(infile);

if(number == NULL)
{
free(number);
abort();
}
newNumber = strtol(number, &pEnd, 10);
sum += newNumber;

if(!*pEnd)
printf("Converted successfully!\n");
else printf("Conversion error, non-convertible part: %s", pEnd);

fprintf(outfile, "%d\n", newNumber);
free(number);
}
fprintf(outfile, "\nSum: %d\n", sum);
}
}
else
{
printf("Error, cannot open the infile!\n");
abort();
}

fclose(infile);
fclose(outfile);
return 0;
}

char *getNumber(FILE *infile)
{
char *number, *number2;
int length, cursor = 0, c;dwwd

number = (char*)malloc(sizeof(char)*CHUNK);
if(number == NULL)
{
printf("Error!\n");
return NULL;
}

length = CHUNK;

while(!isspace(c = getc(infile)) && !feof(infile))
{
if(isdigit(c))
{
number[cursor] = c;
cursor++;

if(cursor >= length)
{
length += CHUNK;
number2 = (char*)realloc(number, cursor);
if(number2 == NULL)
{
free(number);
return NULL;
}
else number = number2;
}
}
}
number[cursor] = '\0';
return number;
}

如果有任何帮助,我将非常感激。

我还发送两个文件,输入文件和输出文件: input_file output_file

最佳答案

您的情况:

while(!isspace(c = getc(infile)) && !feof(infile))

每次遇到空间都会中断。之后您将始终打印该号码。这意味着对于前面没有直接数字的每个间隔(也包括文件末尾),您将在输出文件中打印一个额外的零。

也许添加一个标志,无论您是否至少输入一次 while 。如果您还没有 - 请不要打印任何内容。

关于c - 如何从输出文件中删除前导零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18682266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com