2016-12-10 7 views
0

みんな! Visual Studio 2015を使用してこのCコードを使用する際にいくつか問題があります。私は大学でCを使う必要があるので、私は選択肢がありません。私は彼らが何を意味するか分かりませんが、多くの間違いを受けます。私はそれらのいくつかを修正しましたが、他の人は私にとっては驚くほど複雑です。ここに私のすべての誤りがあるイメージへのコードとIMGURの関係があります。あなたのコードでビジュアルスタジオのCコード2015エラー

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); 
} 
+1

関数呼び出しの引数が少なすぎるため、呼び出された関数のマニュアルページを読んで修正してください。その後、提供された引数を必要な引数と適切に一致させることができないので、他のエラーのいくつかが消え去る可能性があります。 –

+0

このコードは私の教授がVisual Studio 2006で書いたので、実際のエラーはないと思います。 –

+0

'fime'の宣言が正しくありません。 –

答えて

1

一つの問題は、あなたがfopen_s関数に間違った方法を使用しているということです。

manpageに応じて三つの引数が渡される、fopen_s()(もっと知るためにクリックしてください):あなたはあまりにもいくつか送っているとして、あなたのコード内でそう

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

、次が間違っています(2つだけ)*引数

代わり
txt = fopen_s("products.txt", "wt"); 

、あなたが行う必要があります。

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

とタイプFILE*のあるタイプerrno_ttxtのあるfopen_sの戻り値を割り当てないでください。

関連する問題