注册 登录
编程论坛 C语言论坛

求大佬改正寻找一下错误,

q3064219762 发布于 2020-05-02 11:11, 1723 次点击
#include<process.h>
#include<string>
#include<stdio.h>
#include<stdlib.h>
#define _CRT_SECURE_NO_VARNINGS
void mulu()
{
    int* a;
    a = (int*)malloc(sizeof(int));
    FILE* fp;
    fp=fopen( "1232.txt", "a+");
    if (fp == NULL)
    {
        printf("已出现错误,请告诉漠情大神!");
        getchar();
        exit(0);
    }
    fscanf(fp, "%d", a);
    printf("%d", *a);
    free(a);
    fclose(fp);
}
///////////////////////////////////////////
////            成绩输入
///////////////////////////////////////////
 void shuru()
{
    int y;
    y = NULL;
    FILE *fp;
    fp=fopen("1232.txt", "a+");
    if (fp ==NULL)
    {
        printf("已出现错误,请告诉漠情大神!");
        getchar();
        exit(0);
    }
    printf("\n\t输入分数:");
    scanf_s("%d", &y);
    fprintf(fp, "%c", y);
    fclose(fp);
    printf("\n\t已保存\n");
}
//////////////////////////////////////////////
//                进入密码保护
/////////////////////////////////////////////
void mima()
{
    unsigned long a;
    int c;
    for (c = 1; c == 1;)
    {
        printf("本程序由漠情大神创建,要密码找漠情大神\n");            //用于权利保护和装逼
        printf("输入密码:");
        scanf("%iu", &a);
        if (a == 3064219762)
        {
            printf("进入系统\n");
            break;
        }
        else
        {

            printf("密码错误\n");
        }
    }
}
////////////////////////////////////////////
//                    界面
////////////////////////////////////////////
int jiemian()
{
    int a;
        printf("\t\t请输入功能序号:");                //提示用户功能信息
        printf("\n\n\t1:成绩输入");
        printf("\n\t2:与上次作比较(任务)");
        printf("\n\t3:成绩目录");
        printf("\n\t按任意键退出程序");
        printf("\n\t\t功能序号为:");
        scanf("%d", &a);
    return a;
}


int main()
{
    mima();
    int a;
    while (1)
    {
        a = jiemian();            //取用户要执行的功能的序号
        switch (a)
        {
        case 1:                    //成绩输入
            shuru();
            continue;
        case 2:                    //与上次作比较(任务)

            continue;
        case 3:                    //成绩目录
            mulu();
            continue;
        default:                //用于结束循环(退出程序)
            break;
        }
        break;
    }
    return 0;
}
运行后:
本程序由漠情大神创建,要密码找漠情大神
输入密码:3064219762
进入系统
                请输入功能序号:

        1:成绩输入
        2:与上次作比较(任务)
        3:成绩目录
        按任意键退出程序
                功能序号为:1(我输入的)

        输入分数:39

        已保存
                请输入功能序号:

        1:成绩输入
        2:与上次作比较(任务)
        3:成绩目录
        按任意键退出程序
                功能序号为:3(我输入的)                            ///////////
-842150451    ////////////////////////////////////////////////////////问题所在//////////////////////////////////////////////
              请输入功能序号:                                       //////////

        1:成绩输入
        2:与上次作比较(任务)
        3:成绩目录
        按任意键退出程序
                功能序号为:
7 回复
#2
q30642197622020-05-02 21:21
求大佬帮我一下,我实在找不出错误,技术有限。
#3
forever742020-05-02 21:55
你好好地输入了数据以后为啥要用%c存进文件呢?
#4
wmf20142020-05-02 22:00
输入输出函数修改如下:
程序代码:
void mulu()
{
    int aa;
    FILE* fp;
    fp = fopen("1232.txt", "a+");
    if (fp == NULL)
    {
        printf("已出现错误,请告诉漠情大神!");
        getchar();
        exit(0);
    }
    while (fscanf(fp, "%d", &aa)!=EOF)
        printf("%d ", aa);
    printf("\n");
    fclose(fp);
}
///////////////////////////////////////////
////            成绩输入
///////////////////////////////////////////
void shuru()
{
    int y;
    y = NULL;
    FILE *fp;
    fp = fopen("1232.txt", "a+");
    if (fp == NULL)
    {
        printf("已出现错误,请告诉漠情大神!");
        getchar();
        exit(0);
    }
    printf("\n\t输入分数:");
    scanf_s("%d", &y);
    fprintf(fp, "%d ", y);
    fclose(fp);
    printf("\n\t已保存\n");
}
//////////////////////////////////////////////
//                进入密码保护
/////////////////////////////////////////////
#5
q30642197622020-05-03 08:16
回复 3楼 forever74
谢谢
#6
lin51616782020-05-04 01:08
以下是引用wmf2014在2020-5-2 22:00:51的发言:

输入输出函数修改如下:
void mulu()
{
    int aa;
    FILE* fp;
    fp = fopen("1232.txt", "a+");
    if (fp == NULL)
    {
        printf("已出现错误,请告诉漠情大神!");
        getchar();
        exit(0);
    }
    while (fscanf(fp, "%d", &aa)!=EOF)
        printf("%d ", aa);
    printf("\n");
    fclose(fp);
}

a+打开 读写位置是文件结尾
fscanf 直接 eof 了
#7
wmf20142020-05-04 09:06
回复 6楼 lin5161678
最初是r模式,调试时发现当文件不存在时会出错,改成楼主的原a+模式,读出正常。百度也只说a+模式可读写创建文件,写是在文件末尾,没说读文件。
为此又专门对r+模式打开文件做了实验:
1,仅仅读,是从文件开头读。
2,仅仅写,是从文件末尾写
3,用“读一个、写一个、读所有”的顺序则第一个读正常,后面的写读不正常,表现为没写数据,没读数据
4,用“写一个、读所有”的顺序则都不正常,表现为数据没写,读所有进入死循环,在死循环里设置强制跳出执行正常文件关闭,前面的写数据也未执行。
实验代码如下:
程序代码:
void mulu()
{
    int aa,c=0;
    FILE* fp;
    fp = fopen("1232.txt", "a+");
    if (fp == NULL)
    {
        printf("已出现错误,请告诉漠情大神!");
        getchar();
        exit(0);
    }
//    fscanf(fp, "%d", &aa);
//    printf("%d\n", aa);
    aa = 89;
    fprintf(fp, "%d ", aa);
    while (fscanf(fp, "%d", &aa) != EOF)
    {
        printf("%d ", aa);
        c = c + 1;
        if (c > 5)break;
    }
    printf("\n");
    fclose(fp);
}
#8
forever742020-05-04 10:15
嗯,带加号打开的文件可读可写,但是读写之间需要定位操作,fseek或者rewind之类的。
1