Member 12869596 Ответов: 3

В чем же здесь ошибка? В части int I, j;


#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#define NUM_CANDIDATE 3
#define TOWN 3

int votes[NUM_CANDIDATE][TOWN];
candidate_entry (char*name[]) ;
{int i,j;
for(i=0;i<=NUM_CANDIDATE;++i)
{cout<<"Enter name of Candidate No."<<i+1;
cin>>name[i];
for(j=0;j<TOWN;++j);
cout<<"Enter #Vote for Candidate"<<name[i]<<"in Town"<<j+1<<;
cin>>votes[i][j];
}
}
 show_total_votes(char*name[])
{int total;
cout<< "Name     Town\n";
cout<< "of Candidate     1     2     3\n";
cout<<"Total\n<<" ;

cout<< "================================<<\n";
for(i=0;i<=NUM_CANDIDATE;++i)
{total=0;
cout<<"name[i]"<<name[i];
for(j=0;j<=TOWN;++j)
{total+=votes[i][j];
cout<<"total"<<total;
}
}
int main()
{char name[NUM_CANDIDATE][NAME_LEN];
int i;

char*name_pt[NUM_CANDIDATE];

clrscr();
for(i=0;i<NUM_CANDIDATE-1;++1)
name_pt[i]=name[i];

candidate_entry(name_pt);
show_total_votes(name_pt);
	       }
getch();
return(0);
}


Что я уже пробовал:

#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#define NUM_CANDIDATE 3
#define TOWN 3

int votes[NUM_CANDIDATE][TOWN];
candidate_entry (char*name[]) ;
{int i,j;
for(i=0;i<=NUM_CANDIDATE;++i)
{cout<<"Enter name of Candidate No."<<i+1;
cin>>name[i];
for(j=0;j<TOWN;++j);
cout<<"Enter #Vote for Candidate"<<name[i]<<"in Town"<<j+1<<;
cin>>votes[i][j];
}
}
 show_total_votes(char*name[])
{int total;
cout<< "Name     Town\n";
cout<< "of Candidate     1     2     3\n";
cout<<"Total\n<<" ;

cout<< "================================<<\n";
for(i=0;i<=NUM_CANDIDATE;++i)
{total=0;
cout<<"name[i]"<<name[i];
for(j=0;j<=TOWN;++j)
{total+=votes[i][j];
cout<<"total"<<total;
}
}
int main()
{char name[NUM_CANDIDATE][NAME_LEN];
int i;

char*name_pt[NUM_CANDIDATE];

clrscr();
for(i=0;i<NUM_CANDIDATE-1;++1)
name_pt[i]=name[i];

candidate_entry(name_pt);
show_total_votes(name_pt);
	       }
getch();
return(0);
}

Dave Kreskowiak

Вы хотите описать, в чем проблема, или все должны просто сделать дикую догадку?

Member 12869596

Когда я компилирую его с помощью TurboC++, строка 9 показывает ошибку "объявление завершено неправильно".

Member 12869596

или, скорее, часть строки 8 ({int i'J;)

Philippe Mori

Зачем писать один и тот же код дважды? Почему бы не сделать правильный отступ? И почему бы не объяснить проблему?

3 Ответов

Рейтинг:
2

Jochen Arndt

В C / C++ точка с запятой завершает команду или объявление. Так что позаботьтесь о том, где его использовать.

В определениях функций (реализациях) не должно быть точки с запятой:

// Function declaration:
void candidate_entry (char*name[]) ;

// Function definition (implementation):
void candidate_entry (char*name[])
{
    // ...
}

[РЕДАКТИРОВАТЬ]
Спасибо Ричарду за то, что он указал на тот факт, что возвращаемый тип отсутствовал в опубликованном коде и в моем первоначальном решении. Таким образом, в одной строке кода есть ошибки.
[/РЕДАКТИРОВАТЬ]

Распространенной ошибкой является также размещение точки с запятой в конце for заявление:
for(j=0;j<TOWN;++j);

Это завершает цикл, и следующий оператор не выполняется внутри цикла. Все современные компиляторы генерируют предупреждение в этом случае при использовании высокого уровня предупреждения (но древний Turbo-C++ может этого не делать).

В C++ локальные переменные должны быть объявлены при использовании, а не поверх функции, как это требуется для C. Это привело бы к ошибке с современными компиляторами:
for(int j=0;j<TOWN;++j);
// Compiler throws an error here about unknown variable j
//  because j is out of scope now
cout<<"Enter #Vote for Candidate"<<name[i]<<"in Town"<<j+1<<;

Но опять же, это может не относиться к старому компилятору Turbo-C++.

Некоторые общие советы:

  • Убедитесь, что код легко читается (например, с помощью отступов).
  • Выберите самый высокий уровень предупреждения компилятора.
  • При возникновении ошибки или предупреждения прочтите сообщение и попытайтесь понять его.
  • Прочтите документацию компилятора для этого сообщения или найдите его в интернете для получения дополнительной информации.
  • Проверьте строку кода, в которой произошла ошибка, и предшествующие строки. Ошибка или предупреждение часто берутся из предыдущей строки и обнаруживаются позже.
  • Если вы все еще застряли, вы можете спросить такое сообщество, как это. Но затем включите полное сообщение и укажите соответствующую строку в опубликованном коде.


Richard MacCutchan

Отсутствует тип возврата.

Jochen Arndt

Сбился с курса!
Потягивал свой первый кофе во время отправки. Должен быть еще один.

Этого бы не произошло, если бы были опубликованы сообщения об ошибках.

Спасибо, Ричард.
Я обновлю свое решение.

Richard MacCutchan

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

Рейтинг:
2

Patrice T

Вы должны попробовать

candidate_entry (char*name[])
{
int i,j;


И тип возвращаемого значения отсутствует.


Richard MacCutchan

Отсутствует тип возврата.

Patrice T

Конечно, я был сосредоточен на полуколонне.

Рейтинг:
0

OriginalGriff

Это не в объявлении функции:

int votes[NUM_CANDIDATE][TOWN];
candidate_entry (char*name[]) ;
    {
    int i,j;
    for(i=0;i<=NUM_CANDIDATE;++i)
        {
        cout<<"Enter name of Candidate No."<<i+1;&lt;!-- newline="" --="">        cin>>name[i];

Я догадываюсь, что вы хотели сказать:
int votes[NUM_CANDIDATE][TOWN];
void candidate_entry (char*name[])
    {
    int i,j;
    for(i=0;i<=NUM_CANDIDATE;++i)
        {
        cout<<"Enter name of Candidate No."<<i+1;&lt;!-- newline="" --="">        cin>>name[i];

Это не решит всех проблем (ваших main функция тоже хорошо испорчена), но это исправит.

И, пожалуйста, сделайте отступ в своем коде! Это значительно облегчает обнаружение подобных проблем...