Visual Studio 2015中的C代码错误

天使瓦西里夫(Angel Vasilev)

伙计们!我在使用Visual Studio 2015和使用此C代码时遇到一些问题。我必须在大学中使用C语言,所以我别无选择。我收到很多错误,我不知道它们是什么意思。我修复了其中的一些,但其他一些对我来说却令人难以置信。这是代码和包含我所有错误的IMGUR图像。

http://i.imgur.com/iaSu1RI.png

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

struct Product {
    int kod;
    char ime[20], mqrka[20];
    float cena, kol;
};

char *fime[30];
FILE *fp;
Product pr;

void createfile() {
    fp = fopen_s(*fime, "wb");
    fclose(fp);
    printf_s("Файлът е създаден!\n");
}

void readProduct(Product *p) {
    printf_s("Данни за нов продукт:\n");
    printf_s("Код: "); scanf_s("%d", &p->kod); getchar();
    printf_s("Име: "); gets_s(p->ime);
    printf_s("Мярка: "); gets_s(p->mqrka);
    printf_s("Единична цена: "); scanf_s("%f", &p->cena);
    printf_s("Количество: "); scanf_s("%f", &p->kol);
    getchar();

}

void addData() {
    fp = fopen_s(*fime, "a+b");
    char c;
    do {
        readProduct(&pr);
        fwrite(&pr, sizeof(pr), 1, fp);
        printf_s("Още продукти? (y/n) : ");
        c = getchar(); getchar();
    } while (c == 'y');
    fclose(fp);
}

void writeProducts() {
    fp = fopen_s(*fime, "rb");
    printf_s("Продукти във файла:\n");
    fread(&pr, sizeof(pr), 1, fp);
    while (!feof(fp)) {
        printf_s("%d %s с количество:%f\n", pr.kod, pr.ime, pr.kol);
        fread(&pr, sizeof(pr), 1, fp);
    }
    fclose(fp);
}

void changeProduct() {
    fp = fopen_s(*fime, "r+b");
    int k;
    printf_s("Задай код на продукт: ");
    scanf_s("%d", &k);
    fread(&pr, sizeof(pr), 1, fp);
    while (!feof(fp)) {
        if (pr.kod == k) {
            float dk;
            printf_s("Въведи допълнително количество: ");
            scanf_s("%f", &dk);
            pr.kol += dk;
            fseek(fp, -(long) sizeof(pr), SEEK_CUR);
            fwrite(&pr, sizeof(pr), 1, fp);
            printf_s("Добавено е количество към продукт: %s \n", pr.ime);
            break;
        }
        fread(&pr, sizeof(pr), 1, fp);
    }
    fclose(fp);
}

void calculateMoney() {
    fp = fopen_s(*fime, "rb");
    float suma = 0.0;
    fread(&pr, sizeof(pr), 1, fp);
    while (!feof(fp)) {
        suma = pr.kol*pr.cena;
        fread(&pr, sizeof(pr), 1, fp);
    }
    fclose(fp);
    printf_s("Налична стока в пари: %.2f\n", suma);
}

void writeData() {
    char imqrka[20];
    fp = fopen_s(*fime, "rb");
    fread(&pr, sizeof(pr), 1, fp);
    getchar();
    printf_s("Въведи зададена мярка:");
    gets_s(imqrka);
    while (!feof(fp)) {
        if (strcmp(imqrka, pr.mqrka) == 0 && pr.kol>0) {
            printf_s("%d %s с количество:%f\n", pr.kod, pr.ime, pr.kol);
        }
        fread(&pr, sizeof(pr), 1, fp);
    }
    fclose(fp);
}

void writeTextFile() {
    FILE *txt;
    txt = fopen_s("products.txt", "wt");
    fp = fopen_s(*fime, "rb");
    fread(&pr, sizeof(pr), 1, fp);
    while (!feof(fp)) {
        fprintf(txt, "%d %s с количество:.2%f и цена:%.2f\n", pr.kod, pr.ime, pr.kol, pr.cena);
        fread(&pr, sizeof(pr), 1, fp);
    }
    fclose(fp);
    fclose(txt);
    printf_s("Продуктите се записаха в текстовия файл.\n");
}

void deleteData() {
    FILE *temp = fopen_s("temp", "rb");
    int k;
    printf_s("Въведи код:");
    scanf_s("%d", &k);
    fp = fopen_s(fime, "rb");
    fread(&pr, sizeof(pr), 1, fp);
    while (!feof(fp)) {
        if (pr.kod != k)
            fwrite(&pr, sizeof(pr), 1, temp);
        else
            printf_s("продукът е изтрит: \n");
        fread(&pr, sizeof(pr), 1, fp);
    }
    fclose(fp);
    fclose(temp);
    remove(fime);
    rename("temp", fime);
}
void main() {
    system("chcp 1251");
    printf_s("Име на файл: ");
    gets_s(fime);
    int otg;
    do {
        printf_s("\nМеню\n");
        printf_s("0 - Изход\n");
        printf_s("1 - Създаване на празен файл.\n");
        printf_s("2 - Добавяне към файла.\n");
        printf_s("3 - Промяна на количество по зададен код.\n");
        printf_s("4 - Изчисляване на налична стока в парично изражение.\n");
        printf_s("5 - Извеждане всички продукти със зададена мярка и количество > 0.\n");
        printf_s("6 - Извеждане всички продукти от файла.\n");
        printf_s("7 - Извеждане всички продукти в текстов файл.\n");
        printf_s("8 - Изтриване на продукт от файла по зададен код.\n");
        printf_s("Избери: ");
        scanf_s("%d", &otg);
        switch (otg) {
        case 1: createfile(); break;
        case 2: addData(); break;
        case 3: changeProduct(); break;
        case 4: calculateMoney(); break;
        case 5: writeData(); break;
        case 6: writeProducts(); break;
        case 7: writeTextFile(); break;
        case 8: deleteData(); break;
        }
    } while (otg != 0);
}
切鲁比

代码的一个问题是您使用fopen_s函数的方式错误。

根据手册页 (点击了解更多)fopen_s(),有三个参数传递:

errno_t fopen_s(   
   FILE** pFile,  
   const char *filename,  
   const char *mode   
);  

所以在您的代码中,以下是错误的,因为您发送的参数太少(仅两个)*

txt = fopen_s("products.txt", "wt"); 

相反,您必须执行以下操作:

fopen_s(&txt, "products.txt", "wt");

不分配的返回值fopen_s是类型errno_ttxt的类型是哪个FILE*

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章