读取文件并存储到变量中

时间:2015-12-10 08:06:19

标签: c string file save

我花了最后4或5个小时做一些可能非常简单的事情,我尝试了很多不同的方法。我想要做的是让我的程序在保存的测试文件中保存每行的结尾。这将是球员姓名,后面是球衣号码或重量等。文件以这样的格式保存:

名字是:xxxxxx

姓氏是:xxxxx

出生日期是:xxxxxx

我希望我的代码只能将xxxxxx存储在一个单独的变量中,这样我就可以对它进行解密,因为只有部分是加密的。

我到目前为止的代码是

int main()
{
    int dob;
    char lastname[15], *ptr, filename[25], line[40], storage[200], a[15];
    FILE *file;

    printf("Please enter the last name of your player: ");
    scanf("%s", lastname);
    printf("\nPlease enter the date of birth of your player: ");
    scanf("%d", &dob);
    printf("\n\n");
    sprintf(filename, "%s%6d.pat", lastname, dob);
    printf("%s", filename);
    file = fopen(filename, "r");
    while(fgets(line, sizeof(line), file) != NULL)
    {
        fprintf(stdout, "%s", line);

    }


    fscanf(file, "%s: %s\n", storage, a);
    printf("%s %s", storage, a);

我现在正在尝试使用这段代码来获取最后一个字符串:然后对它应用一个小的解密,但我似乎在第一行之后得到了一个无限循环的名称。

   do
    {
        if(sscanf(line,"%*[^:]:%19s",s)==1)
        {  
            for(i = 0; i < slen; i++) /*encrypting firstname*/
            {
                slen = strlen(s);
                s[i] = (char)((s[i] - 'a' - 4) % 26 + 'a');
                if(s == '\0')
                {
                    break;
                }        
            }    
            printf("%s",s);
            slen = strlen(s);
            slen--;

        }
    }while(slen > 0);

1 个答案:

答案 0 :(得分:1)

您可以使用sscanf功能 -

char s[20];
if(sscanf(line,"%*[^:]:%19s",s)==1){          //check return of sscanf
 /*                  %*[^:] will read string till ':' and discard it     */
         printf("%s",s);
}

这会将您想要的字符串存储在s

注意 - 当您显示相关内容时,您文件中的数据应该是格式。

如果您想要数据甚至是外部循环,那么请使用2-d char数组。当您从文件中读取新数据时,增加循环中数组的索引。

编辑 -

在计算字符串长度之前,请勿使用未初始化的变量slen。您可以将代码重写为 -

    int i=0;
    if(sscanf(line,"%*[^:]:%19s",s)==1)
    {  
        slen = strlen(s);
        while(i<slen)/*encrypting firstname*/
        {
            //slen = strlen(s);
            s[i] = (char)((s[i] - 'a' - 4) % 26 + 'a');
            if(s == '\0')
            {
                break;
            }       
             i++; 
        }    
        printf("%s",s);           
        slen--;
    }