Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Синтаксические ошибки в программе (http://forum.oszone.net/showthread.php?t=134237)

SS3 09-03-2009 18:38 1058963

Синтаксические ошибки в программе
 
Вот то что я переписал с книги А. Нейбауэр. Моя первая программа на 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 1058981

SS3, Функции
Цитата:

Цитата 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 1059015

Я єто знаю и без тебя, Drongo, знаю.
Меня интересует как убрать єти ошибки, по книжным примерам все правильно, может тут мне подскажут как устранить эти неполадки.

SS3 09-03-2009 20:26 1059049

Вот я решил попробовать на простом примере:

Код:

// 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 1059133

Цитата:

Цитата SS3
как убрать єти ошибки »

Код:

...
#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);
}



Время: 10:54.

Время: 10:54.
© OSzone.net 2001-