addcd()
{
int pause;
if(count[COLOR=red]>>[/COLOR]=MAX)
{
puts("К сожалению
свободных ячеек нет\n");
pause=getchar();
return;
}
Почему не работает программа на С
И как сделать так чтоб если прогу не вбивая в в TURBOC просто перенеся ее в файл рууский язык не читался как лабуда всякая???
Программа составления каталога компакт-дисков.
[COLOR="Red"]какие проблемы сообщение отредактировать?[/COLOR] (moderator)
при написании кода в посте, используем тэги code.
если в программе ошибка: пишем на какие строки ругается компилятор(не забыв их отметить в коде при помощи коментариев) + содержание ошибки.
Код:
также не указан тип функции, и вообще в какой среде программим?
нужно бы:
также непонятно зачем код : pause=getchar();
если нет свободного места, достаточно вывести сообщение об ошибке.
функция должна выгледеть что-то вроде
Код:
void addcd(void)
{
if(count > MAX) //or count >= MAX
puts("К сожалению свободных ячеек нет\n");
else
{
[COLOR=teal]//код для добавления CД[/COLOR]
}
}
{
if(count > MAX) //or count >= MAX
puts("К сожалению свободных ячеек нет\n");
else
{
[COLOR=teal]//код для добавления CД[/COLOR]
}
}
пиши код частями, не надо пытаться реализовывать все функции одновременно, а потом искать ошибки. для начала реализуй опции: добавить ЦД в файл, расспечатать содержимое файла, выход из программы. справишься с этим - можешь сортировку добавлять и т.д.
иначе - зашьеся.
Оформляй нормально код, что бы легко было его читать, не забывай обьявлять прототипы функций, или пиши мэйн последней программой(но лучше так ненадо).
пример :
Код:
#include "stdio.h"
#include <stdlib.h> //здесь функция exit
#define FILENAME "CDfile.txt"
#define TEMPFILE "Temp"
#define MAX 20
/*----- Global Variables ----*/
struct CD
{
char name[20];
char description[40];
char category[12];
float cost;
//int number;
} disc;
int slots[MAX];
int count;
FILE *fp, *tp, *printer;
/*----- прототипы функций --*/
void addcd(void); // add CD to collections
//не забудь написать прототипы для всех функций ...
main()
{
char select;
// getslots();
do
{
printf("\nМоя коллекция компакт-дисков\n");
printf("\n1 Добавить карточку\n");
printf("\n2 Удалить карточку\n");
printf("\n3 Редактировать содержимое карточки\n");
printf("\n4 Изменить номер ячейки\n");
printf("\n5 Сортировка карточек\n");
printf("\n6 Найти карточку\n");
printf("\n7 Вывести на печать\n");
printf("\n8 Выйти из программы\n");
printf("\nПожалйста, введите Ваш выбор: ");
select = getchar();
//putchar('\n');
switch(select)
{
case '1': addcd();break;
/* case '2': delcd();break;
case '3':chcd();break;
case '4':chloc();break;
case '5':sort();break;
case '6':locate();break;
case '7':plist();break;*/
case '8':break;
default: puts("Ошибка, повторите ввод\n\n");
}
}while(select!='8');
return 0;
}
//---------------------------------------------------------
void addcd(void)
{
int pause;
if(count > MAX)
{
puts("К сожалению свободных ячеек нет\n");
pause=getchar();
return;
}
if((fp = fopen(FILENAME,"a")) == NULL)
{
printf("Невозможно открыть файл %s\n",FILENAME);
exit(1);
}
// puts("\n");
printf("\nEnter name disc: ");
scanf("%s", disc.name);
printf("Enter description:");
scanf("%s", disc.description);
printf("Enter category:");
scanf("%s", disc.category);
printf("Enter price:");
scanf("%f", &disc.cost);
// getslot();
fwrite(&disc, sizeof(disc), 1, fp);
fclose(fp);
// getslot();
//return;
}
#include <stdlib.h> //здесь функция exit
#define FILENAME "CDfile.txt"
#define TEMPFILE "Temp"
#define MAX 20
/*----- Global Variables ----*/
struct CD
{
char name[20];
char description[40];
char category[12];
float cost;
//int number;
} disc;
int slots[MAX];
int count;
FILE *fp, *tp, *printer;
/*----- прототипы функций --*/
void addcd(void); // add CD to collections
//не забудь написать прототипы для всех функций ...
main()
{
char select;
// getslots();
do
{
printf("\nМоя коллекция компакт-дисков\n");
printf("\n1 Добавить карточку\n");
printf("\n2 Удалить карточку\n");
printf("\n3 Редактировать содержимое карточки\n");
printf("\n4 Изменить номер ячейки\n");
printf("\n5 Сортировка карточек\n");
printf("\n6 Найти карточку\n");
printf("\n7 Вывести на печать\n");
printf("\n8 Выйти из программы\n");
printf("\nПожалйста, введите Ваш выбор: ");
select = getchar();
//putchar('\n');
switch(select)
{
case '1': addcd();break;
/* case '2': delcd();break;
case '3':chcd();break;
case '4':chloc();break;
case '5':sort();break;
case '6':locate();break;
case '7':plist();break;*/
case '8':break;
default: puts("Ошибка, повторите ввод\n\n");
}
}while(select!='8');
return 0;
}
//---------------------------------------------------------
void addcd(void)
{
int pause;
if(count > MAX)
{
puts("К сожалению свободных ячеек нет\n");
pause=getchar();
return;
}
if((fp = fopen(FILENAME,"a")) == NULL)
{
printf("Невозможно открыть файл %s\n",FILENAME);
exit(1);
}
// puts("\n");
printf("\nEnter name disc: ");
scanf("%s", disc.name);
printf("Enter description:");
scanf("%s", disc.description);
printf("Enter category:");
scanf("%s", disc.category);
printf("Enter price:");
scanf("%f", &disc.cost);
// getslot();
fwrite(&disc, sizeof(disc), 1, fp);
fclose(fp);
// getslot();
//return;
}
Прочитай что-то по основам программирования в С, иначе тебе трудно помогать будет...
особенно не за что =), это был образец форматирования кода и пару ошибок исправила. следущий код я проверила - он рабочий. по крайней мере VS 6 работает.
[COLOR=red]файл на диске С cоздается[/COLOR]
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define FILENAME "c:\\CDfile.txt"
#define TEMPFILE "Temp"
#define MAX 20
[COLOR=green]/*----- Global Variables ----*/[/COLOR]
struct CD
{
char name[20];
char description[40];
char category[12];
double cost;
[COLOR=green]//int number;[/COLOR]
} disc;
int slots[MAX];
int count;
FILE *fp, *tp, *printer;
[COLOR=green]/*----- прототипы функций --*/[/COLOR]
void addcd(void); // add CD to collections
void plist(void);
void printmenu(void);
main()
{
char select;
do
{
printmenu();
select = getche();
switch(select)
{
case '1': addcd();break;
/* case '2': delcd();break;
case '3':chcd();break;
case '4':chloc();break;
case '5':sort();break;
case '6':locate();break;*/
case '7':plist();break;
case '8':break;
default: puts("Ошибка, повторите ввод\n\n");
}
}while(select!='8');
return 0;
}
[COLOR=green]/*---------------------------------------------------------*/[/COLOR]
void printmenu(void)
{
[COLOR=green]/* printf("\nМоя коллекция компакт-дисков\n");*/[/COLOR]
printf("\n1 Add case\n");
printf("\n7 Print List\n");
[COLOR=green]/* printf("\n3 Редактировать содержимое карточки\n");[/COLOR]
[COLOR=green]printf("\n4 Изменить номер ячейки\n");[/COLOR]
[COLOR=green]printf("\n5 Сортировка карточек\n");[/COLOR]
[COLOR=green]printf("\n6 Найти карточку\n");[/COLOR]
[COLOR=green]printf("\n7 Вывести на печать\n");*/[/COLOR]
printf("\n8 Exit.\n");
printf("\nEnter your choice: ");
//putchar('\n');
}
[COLOR=green]/*---------------------------------------------------------*/[/COLOR]
void addcd(void)
{
if(count > MAX)
{
puts("К сожалению свободных ячеек нет\n");
return;
}
if((fp = fopen(FILENAME,"a")) == NULL)
{
printf("Невозможно открыть файл %s\n",FILENAME);
exit(1);
}
count++;
printf("\n\nEnter name disc: ");
scanf("%s", disc.name);
printf("\nEnter description:");
scanf("%s", disc.description);
printf("\nEnter category:");
scanf("%s", disc.category);
printf("\nEnter price:");
scanf("%lf", &disc.cost);
fwrite(&disc, sizeof(disc), 1, fp);
fclose(fp);
}
[COLOR=#008000]/*---------------------------------------------------------*/[/COLOR]
void plist(void)
{
printf("\n");
if((fp = fopen(FILENAME,"r")) == NULL)
{
printf("Невозможно открыть файл %s\n",FILENAME);
exit(1);
}
while(fread(&disc, sizeof(disc), 1, fp)==1)
{
printf("\n%s %s %s %f\n", disc.name, disc.description, disc.category, disc.cost);
}
fclose(fp);
}
#include <stdlib.h>
#include <conio.h>
#define FILENAME "c:\\CDfile.txt"
#define TEMPFILE "Temp"
#define MAX 20
[COLOR=green]/*----- Global Variables ----*/[/COLOR]
struct CD
{
char name[20];
char description[40];
char category[12];
double cost;
[COLOR=green]//int number;[/COLOR]
} disc;
int slots[MAX];
int count;
FILE *fp, *tp, *printer;
[COLOR=green]/*----- прототипы функций --*/[/COLOR]
void addcd(void); // add CD to collections
void plist(void);
void printmenu(void);
main()
{
char select;
do
{
printmenu();
select = getche();
switch(select)
{
case '1': addcd();break;
/* case '2': delcd();break;
case '3':chcd();break;
case '4':chloc();break;
case '5':sort();break;
case '6':locate();break;*/
case '7':plist();break;
case '8':break;
default: puts("Ошибка, повторите ввод\n\n");
}
}while(select!='8');
return 0;
}
[COLOR=green]/*---------------------------------------------------------*/[/COLOR]
void printmenu(void)
{
[COLOR=green]/* printf("\nМоя коллекция компакт-дисков\n");*/[/COLOR]
printf("\n1 Add case\n");
printf("\n7 Print List\n");
[COLOR=green]/* printf("\n3 Редактировать содержимое карточки\n");[/COLOR]
[COLOR=green]printf("\n4 Изменить номер ячейки\n");[/COLOR]
[COLOR=green]printf("\n5 Сортировка карточек\n");[/COLOR]
[COLOR=green]printf("\n6 Найти карточку\n");[/COLOR]
[COLOR=green]printf("\n7 Вывести на печать\n");*/[/COLOR]
printf("\n8 Exit.\n");
printf("\nEnter your choice: ");
//putchar('\n');
}
[COLOR=green]/*---------------------------------------------------------*/[/COLOR]
void addcd(void)
{
if(count > MAX)
{
puts("К сожалению свободных ячеек нет\n");
return;
}
if((fp = fopen(FILENAME,"a")) == NULL)
{
printf("Невозможно открыть файл %s\n",FILENAME);
exit(1);
}
count++;
printf("\n\nEnter name disc: ");
scanf("%s", disc.name);
printf("\nEnter description:");
scanf("%s", disc.description);
printf("\nEnter category:");
scanf("%s", disc.category);
printf("\nEnter price:");
scanf("%lf", &disc.cost);
fwrite(&disc, sizeof(disc), 1, fp);
fclose(fp);
}
[COLOR=#008000]/*---------------------------------------------------------*/[/COLOR]
void plist(void)
{
printf("\n");
if((fp = fopen(FILENAME,"r")) == NULL)
{
printf("Невозможно открыть файл %s\n",FILENAME);
exit(1);
}
while(fread(&disc, sizeof(disc), 1, fp)==1)
{
printf("\n%s %s %s %f\n", disc.name, disc.description, disc.category, disc.cost);
}
fclose(fp);
}
А зачем Оля мне нужна в этой проге пауза=гетчар?Я этого не догоняю. Я начал читать книгу, но только неделю как занимаюсь и очень много вопросов появилось,а вот задать пока было некому, но теперь знаю к кому можно обращатся.Спасибо еще раз!!!
а я откуда знаю? я книгу не писала, по моему мнению не нужно...
если ты только неделю учишь язык - сбавляй обороты, пиши небольшие для начала проги, ну и задавай конкретные вопросы на форуме. а не чудо что ты выше накатал с сотней ошибок, мне все и читать влом. Удачи =).
А в каком компиляторе ты пишешь ето все? А то мне так надоел это ТУРБО Си в нем гемороя!!!
я же написала VS 6, т.е. я пользуюсь Microsoft Visual Studio 6.0 ...
И сбавить обороты не могу, мне прогу сдавать надо через неделю, а у меня все так хреново.Я перевелся из филиала КАИ в настоящий КАИ, и уровни программирования у нас и в Казани разный на порядок оказался, препод это унюхал и грузанул.!!!ЗЛОДЕЙ БЛИН!!! Ну и сказал напиши мне эту прогу и тебе пряник в руки, а вот если нет, то на нет и суда нет!!!
А что за ошибка TYPE MISMATCH IN REDECLARATION ADD
TYPE MISMATCH - несоответствие типа
что бы более подробно узнать об ошибке предлагаю www.msdn.com .Например у меня в проге компилер выдает ошибку: error C2371: 'i' : redefinition; different basic types. идем на сайт, вводим в поисковик номер ошибки: Compiler error C2371 и получаем РЕЗУЛЬТАТ, а затем наслаждаемся жизнью :), и не надо долго ждать. запутаешься - тащи код. Удачи
[COLOR=blue]Только ищем на всех языках, ни в коем случае не на русском, а то долго искать будешь.[/COLOR]
Оля! Кстати привет!!!! У меня вопрос, как можно сделать так чтоб в Турбо Си когда в файл закидываешь текст проги не вбивая его, как сделать так чтоб русский язык не писался загагулинами!Спасибо заранее!!!
Код:
#include <windows.h>// CharToOem
#include <stdio.h>
void main(void)
{
char name[] = "Привет.";
char buff[7];
CharToOem(name,buff);
puts(buff);
}
#include <stdio.h>
void main(void)
{
char name[] = "Привет.";
char buff[7];
CharToOem(name,buff);
puts(buff);
}
Я видел кстати эту тему на другом форуме, но прога не работала!!!Вот так!!!
#include "rusout.h"
int main()
{
cout<<"Привет, мир!"<<endl;
return 0;
}
Вот почти все работает только осталось две последние дописать,Ю но есть вопрос.У меня корректировка не катит может я ошибку допустил?? И еще вот что я когда на компиляцию отправляю, короче там как меню, все работает, а вот когда я ввожу дату приема на работу чела, то дата в файле не сохраняется или просто какойто битый код вместо него и поетому когда я корректировку ввожу у меня выходит что я ввел неправильно такого чела нет вовсе в списке
тебе для корректировки файла надо использовать функцию fseek.
дату в каком формате сохраняешь? пользуй массив символов.(char date[]) будет время завтра ближе к вечеру попробую прогу посмотреть, но не обещаю.
void plist(void)
{
printf("\n");
if((fp = fopen(FILENAME,"r")) == NULL)
{
printf("Невозможно открыть файл %s\n",FILENAME);
exit(1);
}
while(fread(&disc, sizeof(disc), 1, fp)==1)
{
printf("\n%s %s %s %f\n", disc.name, disc.description, disc.category, disc.cost);
}
fclose(fp);
}
Цитата:
У меня может и дебильный ,но вопрос.Почему вот ето не работает
что значит не работает? у меня эта функция работает.
как насчет корректировки, справился? если нет, опиши подробно как ты хочешь чтобы она происходила. чтобы пользователь мог изменить выборочно одно из значений записи, или он заново должен вводить всю запись, и желательно пости функцию(не надо всю прогу), в которой ты пытаешься это реализовать.
Цитата:
и сказал что если я не сдам первую то мне кирдык
а какая первая? тебе что конкретно надо?
Цитата:
Надо сделать корректировку указанной записи
запись - это набор данных, в твоем примере: намеСД, стоимость и т.д. я так понимаю что у пользователя должен быть выбор, что именно из этого набора изменять, или можно заставить его заново ввести все данные и заменить старую запись на новую(этот вариант попроще первого).
Цитата:
Надо сделать корректировку указанной записи,а в этом я уже не секу как
ты должен узнать что точно хочет препод, иначе придется переделывать...
успокойся и конкретно пойми что тебе надо, и потом проси о помощи в конкретных вещах
Код:
chcd()
{
char chname[20];
char fflag;
int pause;
fflag='n';
openrw();
puts("Редактирование сведений о диске\n");
printf("Введите название диска: ");
gets(chname);
while(fread(&disc, sizeof(disc), 1, fp)==1)
{
if(strcmp(disc.name,chname)!=0)
fwrite(&disc, sizeof(disc), 1, tp);
else
{
fflag='y';
puts("Текущая информация\n");
showdisc();
puts("Новая информация\n");
printf("Введите название диска: ");
gets(disc.name);
printf("Введите описание:");
gets(disc.description);
printf("Введите категорию:");
gets(disc.category);
printf("Введите цену:");
scanf("%f", &disc.cost);
if(count>>=MAX)
{
puts("К сожалению
свободных ячеек нет\n");
pause=getchar();
}
else
{
getslot();
}
fwrite(&disc, sizeof(disc), 1, tp);
}
}
fclose(fp);
fclose(tp);
if(fflag=='n')
nofind();
else
{
openwr();
while(fread(&disc, sizeof(disc), 1, tp)==1)
fwrite(&disc, sizeof(disc), 1, fp);
fclose(fp);
fclose(tp);
}
getslots();
return;
}
{
char chname[20];
char fflag;
int pause;
fflag='n';
openrw();
puts("Редактирование сведений о диске\n");
printf("Введите название диска: ");
gets(chname);
while(fread(&disc, sizeof(disc), 1, fp)==1)
{
if(strcmp(disc.name,chname)!=0)
fwrite(&disc, sizeof(disc), 1, tp);
else
{
fflag='y';
puts("Текущая информация\n");
showdisc();
puts("Новая информация\n");
printf("Введите название диска: ");
gets(disc.name);
printf("Введите описание:");
gets(disc.description);
printf("Введите категорию:");
gets(disc.category);
printf("Введите цену:");
scanf("%f", &disc.cost);
if(count>>=MAX)
{
puts("К сожалению
свободных ячеек нет\n");
pause=getchar();
}
else
{
getslot();
}
fwrite(&disc, sizeof(disc), 1, tp);
}
}
fclose(fp);
fclose(tp);
if(fflag=='n')
nofind();
else
{
openwr();
while(fread(&disc, sizeof(disc), 1, tp)==1)
fwrite(&disc, sizeof(disc), 1, fp);
fclose(fp);
fclose(tp);
}
getslots();
return;
}
вообще то тебе надо, мне эта задача сто лет ненадо, просто помагаю ... иногда :)
зы не забывай, что у других их личные заботы есть...
http://www.codenet.ru/search/?q=fseek&spr=any
http://www.codenet.ru/cat/Languages/C-CPP/
Извини Оль! Ладно напишу, вроде не дурак. Короче если помошь в задачах по графам нужна,пишите на мыло [email]belomor-kan@mail.ru[/email]. Ето единственное что я точно легко могу делать на Си! Помогу сделать даже курсач!!!Пишите
Антон,
Гадя Петрович Хренова,
Дима и т.д.
Заранее спасибо!
для сравнения строк используй функцию strcmp(str1, str2) :
http://www.codenet.ru/progr/cpp/sprd/strcat_strdup.php
Код:
void deleteRecord(FILE *fPtr)
{ error C2371: 'deleteRecord' : redefinition; different basic types
struct workData work;
struct workData Client={0};
int NUM;
printf("‚ўҐ¤ЁвҐ *®¬Ґа ¤«п г¤*«Ґ*Ёп (1-100):\n");
scanf("%d",&NUM);
fseek(fPtr,(NUM-1)*sizeof(struct workData),SEEK_SET);
fread(&work,sizeof(struct workData),1,fPtr);
if(work.num==0)
{
printf("Ќ®¬Ґа #%d *Ґ **©¤Ґ*\n",NUM);
}
else
{
fseek(fPtr,(NUM-1)*sizeof(struct workData),SEEK_SET);
fwrite(&Client,sizeof(struct workData),1,fPtr);
}
}
{ error C2371: 'deleteRecord' : redefinition; different basic types
struct workData work;
struct workData Client={0};
int NUM;
printf("‚ўҐ¤ЁвҐ *®¬Ґа ¤«п г¤*«Ґ*Ёп (1-100):\n");
scanf("%d",&NUM);
fseek(fPtr,(NUM-1)*sizeof(struct workData),SEEK_SET);
fread(&work,sizeof(struct workData),1,fPtr);
if(work.num==0)
{
printf("Ќ®¬Ґа #%d *Ґ **©¤Ґ*\n",NUM);
}
else
{
fseek(fPtr,(NUM-1)*sizeof(struct workData),SEEK_SET);
fwrite(&Client,sizeof(struct workData),1,fPtr);
}
}
Буду очень благодарна, если ты мне объяснишь, что ты здесь пытаешься сделать:
Код:
struct workData Client={0};
п.с. когда компилер ошибку выдает, он еще и номер линии отмечает, где приблизительно ее искать.
Код:
printf("‚ўҐ¤ЁвҐ *®¬Ґа ¤«п г¤*«Ґ*Ёп (1-100):\n");
что за абра кадабра в принтф? :(
Тоесть это инфа по умолчанию, Тоесть создается дата файл с инфой по умолчанию, вроде так делалось???
Это когда я с Турбо Си переношу то абра кодабра получается а вот как нормалек сделать я непонимать?
struct workData
{
int num;
char name [20];
char dolz [20];
float god;
};
struct workData
{
int num; //variable1 == int
char name [20]; //variable2 == char[]
char dolz [20]; //variable3 == char[]
float god; //variable4 == float ?? [COLOR=red]это ты дату во флоат хочешь сохранить?[/COLOR]
};
[/quote]
Код:
[COLOR=red]struct workData Client={0};[/COLOR]
переменная Клиент типа стракт, нет никакого смысла делать то, что ты написал. подобная форма записи подходит для целочисленного массива( int arr[5] = {0};), что бы задать "инфа по умолчанию", надо:
Код:
struct workData Client={[COLOR=blue]0[/COLOR], [COLOR=purple]"Name"[/COLOR], [COLOR=green]"dolz"[/COLOR], 0.0}; // [COLOR=blue]int[/COLOR], [COLOR=purple]char[],[/COLOR] [COLOR=green]char[],[/COLOR] float
у Дейтела такии примеры есть.
Усек спасибо
А как делать кооректировку существующей записи???, мне прогу писать ненадо, вот только что использовать надо я точно незнаю
у тебя есть файл. в нем хранится n структур, допустим тебе надо изменить структуру k.
1 - при помощи функции fseek устанавливаешь указатель на нужную структуру
Код:
fseek(pointer, (k-1)*sizeof(struct Client), SEEK_SET);
ползователь начинает нумерацию с 1, а в файле нумерация с 0 => к-1.
2 - записываешь данные при помощи fwrite:
Код:
fwrite(&client, sizeof(struct Client), 1, pointer);
единственное тебе надо убедиться, что под номером к действительно существует запись, иначе - выдай сообщение об ошибке.
Оляспасибо за подсказку у меня просто ошибка небольшая была,а так все пашет.Вот только последний вопрос? Я делаю поиск не по номеру сотрудника а по имени, вроде все работает, но вот не выводит он строку о сотруднике.Если нетрудно сможешь посмотреть вот файлик, он рабочий, кстати почти готовый, может кому понадобится, а себе можешь на память оставить.Вспоминать такого дебила как я в программировании и смеятся!!!ФАЙЛ: