Visual Studio 2013 - Как компилировать проект? - C (СИ)
Формулировка задачи:
Всем привет!
Скачал новую Visual Studio2013, решил запустить код написанный на Си
Все настройки для среды делал по этому гайду: http://social.msdn.microsoft.com/For...orum=vcgeneral
Проект запускается, но когда выполняется функция удаления данных с файла появляются ошибки с бесконечным записыванием в конец файла букв M и потерей информации с файла
В Visual Studio 2019 такого не было, подскажите, как исправить
Спасибо!
Решение задачи: «Visual Studio 2013 - Как компилировать проект?»
textual
Листинг программы
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <locale.h>
#include <windows.h>
#define baseFile "data.dat"
#define maxLenghtStr 200
struct Entrans
{
char firstName[25 + 1];
char lastName[25 + 1];
char month[12 + 1];
int numberPhone;
int time;
int price;
} part[100];
int checkBase()
{
FILE *file;
if((file = fopen(baseFile, "r+")) == NULL)
return 1;
return 0;
}
void errorFile()
{
printf("Помилка пiд час вiдкриття файла!\nПерезапустiть програму i попробуйте ще раз!\n\n");
system("pause");
exit(0);
}
void gotoxy(short x, short y)
{
HANDLE StdOut = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord = {x,y};
SetConsoleCursorPosition(StdOut, coord);
}
void getTextConsole(int n)
{
int i = 0;
for (i = 0; i < n; i++)
{
printf("Абонент #%d\n", i + 1);
printf("-------------------------------------\n");
printf("Введiть iмя: ");
scanf("%s", &part[i].firstName);
printf("Введiть прiзвище: ");
scanf("%s", &part[i].lastName);
printf("Введiть телефон: ");
scanf("%d", &part[i].numberPhone);
printf("Введiть мiсяць: ");
scanf("%s", &part[i].month);
printf("Введiть час розмови(в хвилинах): ");
scanf("%d", &part[i].time);
printf("Введiть вартiсть 1-oї хвилини: ");
scanf("%d", &part[i].price);
printf("-------------------------------------\n\n");
}
}
void addTextFile()
{
FILE *file;
int n = 0, i, countStr = 0, flag = 0;
char answer;
char tmpFile[1000][maxLenghtStr + 1];
char tmpStr[maxLenghtStr + 1];
do
{
printf("Введiть кiлькiсть абонентiв для внесення в базу: ");
scanf("%d", &n);
fflush(stdin);
}
while(n <= 0);
do
{
printf("Куда добавляти нових абонентiв(в початок файла - B, кiнець - E): ");
scanf("%c", &answer);
if (answer == 'e' || answer == 'E' || answer == 'b' || answer == 'B')
flag = 1;
fflush(stdin);
}
while (!flag);
if (checkBase())
answer = 'e';
system("cls");
switch(answer)
{
case 'E':
case 'e':
getTextConsole(n);
if((file = fopen(baseFile, "a")) == NULL)
errorFile();
for (i = 0; i < n; i++)
{
fprintf(file, "%s\n", part[i].firstName);
fprintf(file, "%s\n", part[i].lastName);
fprintf(file, "%d\n", part[i].numberPhone);
fprintf(file, "%s\n", part[i].month);
fprintf(file, "%d\n", part[i].time);
fprintf(file, "%d\n", part[i].price);
}
fclose(file);
break;
case 'B':
case 'b':
getTextConsole(n);
if((file = fopen(baseFile, "r+")) == NULL)
errorFile();
while (!feof(file))
{
fgets(tmpStr, maxLenghtStr, file);
strcpy(tmpFile[countStr++], tmpStr);
}
fclose(file);
if((file = fopen(baseFile, "wt")) == NULL)
errorFile();
for (i = 0; i < n; i++)
{
fprintf(file, "%s\n", part[i].firstName);
fprintf(file, "%s\n", part[i].lastName);
fprintf(file, "%d\n", part[i].numberPhone);
fprintf(file, "%s\n", part[i].month);
fprintf(file, "%d\n", part[i].time);
fprintf(file, "%d\n", part[i].price);
}
fclose(file);
if((file = fopen(baseFile, "a")) == NULL)
errorFile();
for (i = 0; i < countStr; i++)
fprintf(file, tmpFile[i]);
fclose(file);
break;
}
printf("Записи успiшно занесенi в файл!\n");
system("pause");
system("cls");
}
void printTextFile(int pause)
{
FILE *file;
int maxLengtStruct = readFile(), i, column = 4;
system("cls");
printf("----------------------------------------------------------------------------\n");
printf("| Прiзвище, iм'я | Телефон | Мiсяць | Час розмови |Варт. 1-ої хв.|\n");
printf("----------------------------------------------------------------------------\n");
printf("| | | | | |\n");
printf("| | | | | |\n");
printf("| | | | | |\n");
printf("| | | | | |\n");
printf("| | | | | |\n");
printf("| | | | | |\n");
printf("| | | | | |\n");
printf("| | | | | |\n");
printf("| | | | | |\n");
printf("| | | | | |\n");
printf("| | | | | |\n");
printf("----------------------------------------------------------------------------\n");
for (i = 0; i < maxLengtStruct; i++)
{
gotoxy(4, column);
printf("%s %s", part[i].firstName, part[i].lastName);
gotoxy(25, column);
printf("%d", part[i].numberPhone);
gotoxy(37, column);
printf("%s", part[i].month);
gotoxy(51, column);
printf("%d", part[i].time);
gotoxy(65, column);
printf("%d", part[i].price);
gotoxy(80, column);
printf("\n");
column += 1;
}
gotoxy(1, column + 10);
if (!pause)
system("pause");
}
void deletePhone()
{
char phone[100];
char tmp;
int lenghtFile = 0, i, j, count = 0;
FILE *file;
char tmpFile[1000][maxLenghtStr];
printf("Введiть телефон з яким видалити записи: ");
scanf("%s", phone);
strcat(phone, "\n");
if((file = fopen(baseFile, "r")) == NULL)
errorFile();
while (!feof(file))
fgets(tmpFile[lenghtFile++], maxLenghtStr, file);
fclose(file);
if((file = fopen(baseFile, "w")) == NULL)
errorFile();
for (i = 2; i < lenghtFile; i += 6)
if (!strcmp(tmpFile[i], phone))
{
for (j = -2; j < 4; j++)
strcpy(tmpFile[i + j], "");
count++;
}
for (i = 0; i < lenghtFile; i++)
fprintf(file, "%s", tmpFile[i]);
fclose(file);
printTextFile(1);
if (count > 0)
printf("Видалено записiв з таким телефоном: %d\n", count);
else
printf("Записи з таким телефоном не найденi!\n");
system("pause");
}
int readFile()
{
FILE *file;
int i = 0;
if((file = fopen(baseFile, "r")) == NULL)
errorFile();
while(!feof(file))
{
fscanf(file, "%s\n", part[i].firstName);
fscanf(file, "%s\n", part[i].lastName);
fscanf(file, "%d", &part[i].numberPhone);
fscanf(file, "%s\n", part[i].month);
fscanf(file, "%d", &part[i].time);
fscanf(file, "%d", &part[i].price);
i++;
}
fclose(file);
return (i - 1);
}
void sortFile()
{
struct Entrans tmp;
FILE *file;
int maxLengtStruct = readFile(), i, j;
system("cls");
for(i = 0; i < maxLengtStruct; i++)
for(j = 0; j < maxLengtStruct; j++)
if(strcmp(part[i].lastName, part[j].lastName) < 0)
{
tmp = part[i];
part[i] = part[j];
part[j] = tmp;
}
if((file = fopen(baseFile, "w")) == NULL)
errorFile();
for (i = 0; i < maxLengtStruct; i++)
{
fprintf(file, "%s\n", part[i].firstName);
fprintf(file, "%s\n", part[i].lastName);
fprintf(file, "%d\n", part[i].numberPhone);
fprintf(file, "%s\n", part[i].month);
fprintf(file, "%d\n", part[i].time);
fprintf(file, "%d\n", part[i].price);
}
fclose(file);
printTextFile(1);
printf("Файл успiшно вiдсортований!\n");
system("pause");
}
void sqlOne()
{
int maxLengtStruct = readFile(), i, k = 0;
system("cls");
printf("Список абонентiв в яких час розмови > 10 год. за 1 мiсяць:\n");
printf("-------------------------------------\n");
for (i = 0; i < maxLengtStruct; i++)
if (part[i].time > 600)
printf("%d. %s %s\n", ++k, part[i].lastName, part[i].firstName);
if (k <= 0)
printf("Такi абоненти вiдсутнi!\n");
printf("-------------------------------------\n\n");
system("pause");
}
void sqlTwo()
{
int maxLengtStruct = readFile(), i, k = 0;
system("cls");
printf("Список абонентiв загальна вартiсть яких <= 30 грн. ща 1 мiсяць:\n");
printf("-------------------------------------\n");
for (i = 0; i < maxLengtStruct; i++)
if (part[i].time * part[i].price <= 30)
printf("%d. %s %s\n", ++k, part[i].lastName, part[i].firstName);
if (k <= 0)
printf("Такi абоненти вiдсутнi!\n");
printf("-------------------------------------\n\n");
system("pause");
}
void sqlThree()
{
int maxLengtStruct = readFile(), i, j;
struct Entrans tmp;
system("cls");
printf("Список 5 номерiв телефонiв де час розмови найбiльший:\n");
printf("-------------------------------------\n");
for (i = 0; i < maxLengtStruct; i++)
for (j = 0; j < maxLengtStruct - 1; j++)
if (part[j].time < part[j + 1].time)
{
tmp = part[j];
part[j] = part[j + 1];
part[j + 1] = tmp;
}
for (i = 0; i < 5; i++)
printf("%d. %d\n", i + 1, part[i].numberPhone);
printf("-------------------------------------\n\n");
system("pause");
}
void printMenu()
{
printf(" ................................................. \n");
printf(" : Меню : \n");
printf(" ................................................. \n");
printf(" : : \n");
printf(" : 1. Внести записи в файл : \n");
printf(" : 2. Вивести файл на екран : \n");
printf(" : 3. Вiдсортувати файл за алфавiтом : \n");
printf(" : 4. Видалити записи по номеру з файла : \n");
printf(" : 5. Вивести абонентiв в яких час р. > 10 год. : \n");
printf(" : 6. Вивести абонентiв в яких вартiсть <= 30 г. : \n");
printf(" : 7. Вивести 5 телефонiв де час р. найбiльший : \n");
printf(" : 0. Закрити програму : \n");
printf(" :...............................................: \n");
printf(" Ваш вибiр: ");
}
main()
{
int work = 1, choise;
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
while (work)
{
fflush(stdin);
system("cls");
printMenu();
scanf("%d", &choise);
system("cls");
switch (choise)
{
case 1:
addTextFile();
break;
case 2:
printTextFile(0);
break;
case 3:
sortFile();
break;
case 4:
deletePhone();
break;
case 5:
sqlOne();
break;
case 6:
sqlTwo();
break;
case 7:
sqlThree();
break;
case 0:
work = 0;
break;
default:
printf("\aПомилкове введення! Спробуйте ще раз!\n");
system("pause");
break;
}
}
}