PDA

Показать полную графическую версию : Синтаксические ошибки в программе


SS3
09-03-2009, 18:38
Вот то что я переписал с книги А. Нейбауэр. Моя первая программа на C/C++ :
#include "stdio.h"
#define FILENAME "Cdfile"
#define TEMPFILE "Temp"
#define MAX 20
FILE *fp, *tp, *printer;
struct CD
{
char name[20];
char description[40];
char category[12];
float cost;
int number;
} disc;
int slots[MAX];
int count;

main()
{
char select;
do
{
puts(" Ìîÿ êîëëåêöèÿ êîìïàêò-äèñêîâ\n");
puts("1 Äîáàâèòü êàðòî÷êó\n");
puts("2 Óäàëèòü êàðòî÷êó\n");
puts("3 Ðåäàêòèðîâàòü ñîäåðæèìîå êàðòî÷êè\n");
puts("4 Èçìåíèòü íîìåð ï/ï\n");
puts("5 Ñîðòèðîâêà êàðòî÷åê\n");
puts("6 Íàéòè êàðòî÷êó\n");
puts("7 Âûâåñòè íà ïå÷àòü\n");
puts("8 Âûéòè èç ïðîãðàììû\n");
printf("Ïîæàëóéñòà, ââåäèòå íîìåð âûáðàííîãî ïóíêòà: ");
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);
}

addcd()
{
int pause;
if (count >= MAX)
{
puts("Ê ñîæàëåíèþ, ñâîáîäíûõ ÿ÷ååê íåò\n");
pause = getchar();
return;
}
if ((fp = fopen(FILENAME, "a")) == NULL)
{
printf("Íåâîçìîæíî îòêðûòü ôàéë %s\n", FILENAME);
exit();
}
getslot()
{
int index, flag, pause;
do
{
flag = 0;
printf("Ââåäèòå íîìåð ÿ÷åéêè: ");
scanf("%d", &disc.number);
for (index = 0; index < count; index++)
{
if (slots[index] == disc.number)
{
printf("Ê ñîæàëåíèþ, ÿ÷åéêà óæå çàíÿòà, ïîïðîáóéòå äðóãóþ\n");
flag = 1;
}
}
}
while (disc.number < 1 || disc.number > MAX || flag == 1);
count++;
slots[count] = disc.number;
return;
}

delcd();
{
if (fp = fopen(FILENAME, "r")) == NULL)
{
printf("Íåâîçìîæíî îòêðûòü ôàéë %s\n", FILENAME);
exit();
}
if ((tp = fopen(tempfile, "w")) == NULL)
{
printf("Íåâîçìîæíî îòêðûòü ôàéë %s\n", tempfile);
fclose(fp);
exit();
}
printf("Ââåäèòå íàçâàíèå äèñêà: ");
gets(delname);
while (fread(&disc, sizeof(disc), 1, fp) == 1)
{
if (strcmp(disc.name, delname) != 0)
fwrite(&disc, sizeof(disc), 1, tp);
else
fflag = 'y';
}
fclose(fp);
fclose(tp);
puts("\nÄèñê ñ òàêèì íàçâàíèåì íå íàéäåí");
pause = getchar();
if (fp = fopen(FILENAME, "w")) == NULL)
{
printf("Íåâîçìîæíî îòêðûòü ôàéë %s\n", FILENAME);
exit();
}
if ((tp = fopen(TEMPFILE, "r")) == NULL)
{
printf("Íåâîçìîæíî îòêðûòü ôàéë %s\n", tempfile);
fclose(fp);
exit();
}
while (fread(&disc, sizeof(disc), 1, tp) == 1)
fwrite(&disc, sizeof(disc), 1, fp);
fclose(fp);
fclose(tp);
tp = fopen(tempfile, "w");
fclose(tp);
chcd()
{
openrw();
puts("Ââåäèòå íàçâàíèå äèñêà: ");
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();
}
printf("Ââåäèòå íàçâàíèå äèñêà: ");
gets(disc.name);
if (strlen(name) > 0)
strcpy(disc.name, name);

showdisc()
{
printf("Íàçâàíèå %s\n", disc.name);
printf("Îïèñàíèå %s\n", disc.description);
printf("Êàòåãîðèÿ %s\n", disc.category);
printf("Öåíà %6.2f\n", disc.cost);
printf("Íîìåð ï/ï %d\n", disc.number);
puts("\n\n");
return;
}

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;
}

chloc()
{
char chname[20];
char fflag;
int pause;
fflag='n';
if(count>>=MAX)
{
puts("Ê ñîæàëåíèþ ñâîáîäíûõ ÿ÷ååê íåò\n");
pause=getchar();
return;
}
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Íîâûé íîìåð ÿ÷åéêè\n");
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;
}

locate()
{
char name[20];
char fflag, pause;
fflag='n';
if((fp = fopen(FILENAME,"r")) == NULL)
{
printf("Íåâîçìîæíî îòêðûòü ôàéë %s\n",FILENAME);
exit();
}
puts("Ïîèñê äèñêà\n");
printf("Ââåäèòå íàçâàíèå äèñêà: ");
gets(name);
while(fread(&disc, sizeof(disc), 1, fp)==1)
{
if(strcmp(disc.name,name)==0)
{
fflag='y';
showdisc();
printf("Äëÿ ïðîäîëæåíèÿ íàæìèòå Enter");
pause=getchar();
putchar('\n');
}
}
fclose(fp);
fclose(tp);
if(fflag=='n')
nofind();
return;
}
plist()
{
if((fp = fopen(FILENAME,"r")) == NULL)
{
printf("Íåâîçìîæíî îòêðûòü ôàéë %s\n",FILENAME);
exit();
}
if((printer = fopen("prn","w")) == NULL)
{
printf("Ïå÷àòàþùåå óñòðîéñòâî íå ãîòîâî ê ðàáîòå\n");
fclose(fp);
exit();
}
while(fread(&disc, sizeof(disc), 1, fp)==1)
{
fprintf(printer,"Íàçâàíèå:%s\n",disc.name);
fprintf(printer,"Îïèñàíèå:%s\n",disc.description);
fprintf(printer,"Êàòåãîðèÿ:%s\n",disc.category);
fprintf(printer,"Öåíà:%6.2f\n",disc.cost);
fprintf(printer,"Íîìåð ï/ï:%d\n",disc.number);
fprintf(printer,"\n\n");
}
fclose(printer);
fclose(fp);
return;
}

sort()
{
struct CD temp[MAX];
int index, loop1, loop2, endloop;
loop1=0;
loop2=0;
endloop=0;
index = 0;
if((fp = fopen(FILENAME,"r")) == NULL)
{
printf("Íåâîçìîæíî îòêðûòü ôàéë %s\n",FILENAME);
exit();
}
while(fread(&disc, sizeof(disc), 1, fp)==1)
{
temp[index]=disc;
index++;
}
fclose(fp);
if((fp = fopen(FILENAME,"w")) == NULL)
{
printf("Íåâîçìîæíî îòêðûòü ôàéë %s\n",FILENAME);
exit();
}
for (loop1 = 1; loop1 < MAX+1; loop1++)
{
for (loop2 = 0; loop2 < count; loop2++)
if (temp[loop2].number == loop1)
{
fwrite(&temp[loop2], sizeof(temp[loop2]), 1, fp);
endloop++;
}
if (endloop == count)
break;
Подправил все что мог и знаю, и вот какие у ошибки выдал компилатор (Dev-C++)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp: In function `int main()':
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:37: error: `addcd' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:37: error: (Each undeclared identifier is reported only once for each function it appears in.)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:40: error: `delcd' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:43: error: `chcd' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:46: error: `chloc' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:49: error: `sort' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:52: error: `locate' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:55: error: `plist' undeclared (first use this function)

C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp: At global scope:
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:68: error: ISO C++ forbids declaration of `addcd' with no type
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp: In function `int addcd()':
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:68: error: `int addcd()' used prior to declaration
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:74: error: return-statement with no value, in function returning 'int'
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:79: error: `exit' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:81: error: `getslot' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:82: error: expected `;' before '{' token
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:104: error: `delcd' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:106: error: expected primary-expression before '==' token
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:106: error: expected `;' before ')' token
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:111: error: `tempfile' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:118: error: `delname' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:121: error: `strcmp' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:124: error: `fflag' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:130: error: expected primary-expression before '==' token
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:130: error: expected `;' before ')' token

C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:147: error: `chcd' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:148: error: expected `;' before '{' token
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:348: error: expected `}' at end of input
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:348: error: expected `}' at end of input

Âûïîëíåíèå çàâåðøåíî - на это можите на обращать внимание, это прости кирилица.
Если кому ни лень, то можите откомпилировать программу у себя.
Порчитал всю книгу и так и не понял где взялась функция nofind()

Drongo
09-03-2009, 19:17
SS3, Функции addcd' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:37: error: (Each undeclared identifier is reported only once for each function it appears in.)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:40: error: `delcd' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:43: error: `chcd' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:46: error: `chloc' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:49: error: `sort' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:52: error: `locate' undeclared (first use this function)
C:\Users\Àäìèíèñòðàòîð\Documents\Áåçûìÿííûé3.cpp:55: error: `plist' undeclared (first use this function) »Не объявлены, нет прототипов.
Помоему там ещё скобок '}' нехватает.

SS3
09-03-2009, 19:56
Я єто знаю и без тебя, Drongo, знаю.
Меня интересует как убрать єти ошибки, по книжным примерам все правильно, может тут мне подскажут как устранить эти неполадки.

SS3
09-03-2009, 20:26
Вот я решил попробовать на простом примере:

// 13.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
Vvod();
return (0);
}
int Vvod()
{
char obl[10];
char repeat;
do
{
puts("Введите название области");
gets(obl);
puts("Продолжиь?[Y/N]");
repeat=getchar();
putchar('\n');
}
while(repeat=='y'||repeat=='Y');
return (0);
}

Вот результат:

1>13.cpp
1>c:\users\администратор\documents\visual studio 2008\projects\13\13\13.cpp(10) : error C3861: Vvod: идентификатор не найден
1>Журнал построения был сохранен в "file://c:\Users\Администратор\Documents\Visual Studio 2008\Projects\13\13\Debug\BuildLog.htm"
1>13 - ошибок 1, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Drongo
09-03-2009, 21:26
как убрать єти ошибки »

...
#include <iostream>
using namespace std;

int Vvod(); // Объявляй прототип функции перед её использованием

int _tmain(int argc, _TCHAR* argv[])
{
Vvod();
return (0);
}
// Описание функции ввода Vvod();------------------------
int Vvod()
{
char obl[10];
char repeat;

do{
puts("Введите название области");
gets(obl);
puts("Продолжиь?[Y/N]");
repeat=getchar();
putchar('\n');
}
while(repeat=='y'||repeat=='Y');

return (0);
}Или так, в данном случае описание играет роль прототипа фунции...
#include <iostream>
using namespace std;

int Vvod()
{
char obl[10];
char repeat;

do{
puts("Введите название области");
gets(obl);
puts("Продолжиь?[Y/N]");
repeat = getchar();
putchar('\n');
}
while(repeat=='y'||repeat=='Y');

return (0);
}

int _tmain(int argc, _TCHAR* argv[])
{
Vvod();
return (0);
}




© OSzone.net 2001-2012