2016-06-12 7 views
-3

У меня проблемы с открытием файла, и я не знаю, почему он не работает.Как получить доступ к файлу, если пользователь вводит путь к файлу и выполняет ли арифметические операции над содержимым файла?

Скажите, есть ли у вас файл с именем add.txt, а содержание - 23 и 54, программа возьмет у вас путь к файлу, а затем откроет его и добавит эти два числа.

Он работал для меня, пока я не работал над целыми числами только в своем файле. но я не могу разобрать путь к файлу здесь. Вот мой код,

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 
int main() 
{ 
    int i=0,j,k=0,l,sum=0; 
    char a[200]; 
    char *ptr; 
    int b[20]; 
    b[0]=0; 
    char c[200]; 

fgets(c,sizeof(c),stdin); 

j=strlen(c); 

ptr=(char*)malloc(j*sizeof(char)); 
if(ptr==NULL) 
{ 
    printf("insufficient space"); 
    exit(1); 
} 
for(l=0;l<=j;l++) 
{ 
    *(ptr+l)=c[l]; 
} 
printf("%s",ptr); 
FILE *f; 
f=fopen("ptr","r"); 
while(!feof(f)) 
{ 
    fscanf(f,"%c",&a[i]); 
    i++; 
} 
for(l=0;l<i-1;l++) 
{ 
    if(a[l]>=48&&a[l]<=57) 
     b[k]=b[k]*10+a[l]-'0'; 
    else if(a[l]==10) 
    { 
     k++; 
     b[k]=0; 
    } 
    else 
    { 
     printf("invalid input"); 
     return 0; 
    } 
} 
for(k=0;b[k]!='\0';k++) 
{ 
    sum=sum+b[k]; 
} 
printf("%d",sum); 
free(ptr); 
return 0; 

}

+0

Вы передаете строковый литерал '' ptr '' '' fopen() ', а не указатель char * ptr *. Я думаю, вы также пишете 1 за концом буфера, на который указывает * ptr *, иначе у вас есть UB. –

+0

Я передаю ptr, а ptr держит строку c. поэтому это должно быть имя файла. –

+1

'for (l = 0; l <= j; l ++)' → 'for (l = 0; l

ответ

1

Я переработан и обновил свой код в будущем избегать использования символов петли письмо л («эль»), потому что это выглядит как 1 (один)

Также попробуйте использовать значащие имена для своих переменных, что значительно упрощает понимание кода .

Я прокомментировал области, где обнаружены проблемы.

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 
int main() 
{ 
    int i=0,readCharactersLength,k=0,p,sum=0; 
    int inFileNumbers[200]; //changed this from char to int since you are expecting numbers 
    char *ptr; 
    char readCharacters[200]; 

    fgets(readCharacters,sizeof(readCharacters),stdin); 

    readCharactersLength= strlen(readCharacters); 

    ptr=(char*)malloc(readCharactersLength*sizeof(char)); 

    if(ptr==NULL) 
    { 
     printf("insufficient space"); 
     exit(1); 
    } 

    for(p=0;p<=readCharactersLength;p++) 
    { 
     if(readCharacters[p] == '\n') //If at the end of the line exit and avoid assigning '\n'. This prevents errors when passing the pointer to the File to open 
     break; 

     *(ptr+p)=readCharacters[p]; 
    } 

    printf("%s", ptr); 

    FILE *f; 

    f=fopen(ptr,"r"); 

    while(!feof(f)) 
    { 
     fscanf(f,"%d",&inFileNumbers[i]); 
     i++; 
    } 

    //You can add exception handling code here to handle invalid numbers/input 
    //.... 

    for(k=0;k < i;k++)   //simply add all the numbers found 
    { 
    sum=sum+inFileNumbers[k]; 
    } 

    printf("\n %d",sum); 
    free(ptr); 

    return 0;} 

Счастливое кодирование, и я надеюсь, что это поможет.