Вот исправленный код, который должен это сделать.
#include
#define MAX_BUF 150
void main()
{
int i;
FILE *fin,*fop;char* str;
str = malloc((MAX_BUF * sizeof(char)) + 1);
if (str == NULL){
printf("Out of memory\n");
exit(-1);
}
fin=fopen("atk561011.txt","r");
if(fin == NULL){
printf("ip err");
exit(-2);
}
fop=fopen("svmip.txt","w");
if(fop == NULL){
printf("op err");
exit(-3);
}
for(i=1;i<=911;i++)
{
fgets(str,150,fin);
if((i>300&&i<=360)||(i>600&&i<=660))
str[7]='1';
else
str[7]='0';
fputs(str+7,fop);
// What is that for? should it be
// fputs(str, fop); ?????
// since you're outputting the 7'th character (1/0)?
putc('\n',fop);
}
fclose(fin);
fclose(fop);
if (str != NULL) free(str);
}
Я добавил проверку логики, чтобы убедиться, что файл существует, чтобы продолжить обработку. В противном случае код будет взорван. Так как в исходном коде вы печатали «ip err», если ввод не удался или в случае сбоя вывода, все же продолжайте в цикле for
, который в этом случае приведет к сбою выполнения, так как он все еще пытается читать из несуществующего дескриптора файла при ошибке.
Редактировать: Пожалуйста, см. Комментарий выше в коде. Вы пытаетесь вывести 1/0 на основе условного значения i
между диапазонами 300-360 и 600-660 включительно, в выходной файл. Вы можете уточнить? Должно ли это быть
fputs(str[7], fop);
Надеюсь, это поможет,
С наилучшими пожеланиями,
Том.