首页 > 解决方案 > fscanf 命令无法识别空格

问题描述

我正在尝试编写一个程序来编辑包含用户在代码块上的费用的文本文件。

第一阶段:有一个文件名“abc.txt”。它说明当前金额和每个日期的支出。使用循环,我将“abc.txt”复制到另一个文件“test.txt”。

第二阶段:在另一个循环中,我要求用户添加一个新日期和新金额,这些新日期和金额将被减去或添加到总金额中。

第三阶段:我关闭这两个文件并使用另一个循环将“test.txt”文件(包含所有更新的信息)复制到原始的 abc.txt“文件中。

问题在最后阶段;复制文本时,不会保留空格。

如果你想使用我的代码,你应该有 2 个文本文件名为“abc.txt”和“test.txt”。将“test”文件留空,并在“abc”文件中写下:

[0]       Total amount:    79179      [1]
[1]
[1]
[1]
[0] Date:   1.1.19  [1]
[0] Sub:    10000   70000   [1]
[1]
[0] Date:   2.1.19  [1]
[0] Add:    10000   80000   [1]
[1]
[0] Date:   3.1.19  [1]
[0] Sub:    499 79501   [1]
[1]
[0] Date:   4.1.19  [1]
[0] Sub:    322 79179   [1]
[1]

然后运行这段代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    FILE * filepointer;
    filepointer=fopen("abc.txt","r");

    char name[100];
    char name1[1000];
    int num;
    int old_amount;
    char date[20];
    int flag=0;
    int amount;
    char action[10];
    int tit;

    FILE *test;
    test=fopen("test.txt","w");

    fscanf(filepointer,"%s %s %s %d", &name, &name, &name, &amount );
    printf("The total amount:   %d\n",amount);

    while(!feof(filepointer))
    {
        fscanf(filepointer,"%s",name );

        if(strcmp(name,"[1]")==0)
        {
            printf("\n");
            fprintf(test,"[1]\n");
            fscanf(filepointer,"%s  ",name );
        }
            printf("%s  ",name);
            fprintf(test,name);
            fprintf(test,"   ");
    }

    printf("Enter date: ");
    scanf("%s",&date);

    printf("date: %s\n ",date);
    fprintf(test,"\n[0]   Date:   ");
    fprintf(test,date);
    fprintf(test,"     [1]\n");

    while(flag==0)
        {
            fflush(stdin);
            printf("What is th amount: ");
            scanf("%d",&num);


            printf("[0] %d\nstate action [S] [A]: ",num);
            scanf("%s",&action);


            if(strcmp(action,"a")==0 || strcmp(action,"A")==0)
            {
                fprintf(test,"\n[0]    Add:     %d      ",num);

                amount=amount+num;
                fprintf(test,"%d    [1]\n",amount);
                printf("OK");
            }

            if(strcmp(action,"s")==0 || strcmp(action,"S")==0)
            {
                fprintf(test,"\n[0]    Sub:     %d      ",num);

                amount=amount-num;
                fprintf(test,"%d    [1]\n",amount);
                printf("OK");
            }


            printf("\nDo you wish to add another value?[Y] [N]\n");
            scanf("%s",&action);

            if(strcmp(action,"n")==0 || strcmp(action,"N")==0)
            {
                flag=1;
            }
        }
    fclose(test);
    fclose(filepointer);

    FILE * text;
    text=fopen("test.txt","r");


    FILE *abc;
    abc=fopen("abc.txt","w");

    fprintf(abc,"\n[0]       Total amount:    %d      [1]\n",amount);


    while(!feof(text))
    {
        fscanf(text,"%s",&name1 );

        if(strcmp(name1,"[1]")==0)
        {
            //printf("       GOT IT   \n");
            fprintf(abc,"[1]\n");
            fscanf(text,"%s  ",&name1 );
        }
            printf("%s  ",name1);
            fprintf(abc,"%s ",name1);
            fprintf(abc,"   ");
    }


    return 0;
}

当我在项目文件中运行它时,它工作正常,但是当我作为应用程序运行时,它会导致麻烦......有什么想法吗?

标签: ctextprintfscanfspaces

解决方案


推荐阅读