Member 13479017 Ответов: 4

Пожалуйста, помогите...я запутался в ошибках, которые получаю


Это моя первая программа, пытающаяся использовать "while" для цикла. Я пытаюсь скомпилировать код, и он выдает мне ошибки, которые не имеют ничего общего с этой частью кода, поэтому мне было интересно, может ли кто-нибудь помочь мне понять, почему я получаю эти ошибки.
Вот мой код:

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

void studentGrade (string) ;

int main
{
	string name = "zero" ;
	int scoreOne, scoreTwo, scoreThree, scoreFour, scoreFive, scoreSix, scoreSeven, scoreEight, scoreNine, scoreTen ;
	float average = 0 ;			//stores the average of all grades
	float total = 0 ;			//stores sum of grades
	char letterGrade ;			//stores the final letter grade of student
	if (name = "done")
	{
		cout << "Program is done." ;
	}
	else 
	{
		studentGrade (name) ;
	}
}
void studentGrade (string name)
{
	while (name != "done")
	{
		cout << "Enter student's name." ;
		cin >> name ;
		cout << "Enter " << name << "'s 10 test scores." ;
		cin >> scoreOne >> scoreTwo >> scoreThree >> scoreFour >> scoreFive >> scoreSix >> scoreSeven >> scoreEight >> scoreNine >> scoreTen ;
		total = scoreOne + scoreTwo + scoreThree + scoreFour + scoreFive + scoreSix + scoreSeven + scoreEight + scoreNine + scoreTen ;
		average = total / 10 ;
		if (average > 89.5)
			letterGrade = 'A' ;
		else if (average > 79.5)
			letterGrade = 'B' ;
		else if (average > 69.5)
			letterGrade = 'C' ;
		else if (average > 59.5)
			letterGrade = 'D' ;
		else
			letterGrade = 'F' ;
		cout << "Student's name: " << name << endl ;
		cout << "Average Grade: " << average << endl ;
		cout << "Letter Grade: " << letterGrade << endl ;
	}
}



И это те ошибки, которые я получаю:

prog4.cpp:14: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
prog4.cpp:16: error: expected primary-expression before ‘name’
prog4.cpp:16: error: expected ‘}’ before ‘name’
prog4.cpp:16: error: expected ‘,’ or ‘;’ before ‘name’
prog4.cpp:21: error: expected unqualified-id before ‘if’
prog4.cpp:25: error: expected unqualified-id before ‘else’
prog4.cpp:29: error: expected declaration before ‘}’ token
ф

строка 14: int main

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

Я попытался добавить в #include<string>, потому что я видел это в интернете, но это не изменило вторую ошибку. Спасибо, если вы можете помочь.

4 Ответов

Рейтинг:
35

Jochen Arndt

Цитата:
строка 14: int main
Так что взгляните на эту строчку:
int main
{
    // ...
}
Это недопустимый C/C++. Определение функции состоит из

  1. возвращаемый тип (int здесь),
  2. имя (main здесь),
  3. список параметров, заключенный в круглые скобки (отсутствует), и
  4. тело заключено в скобки.

Так и должно быть
int main()
{
    // function body

    // Return statement (does not exist in your code)
    return 0;
}
Все остальные ошибки исходят из начальной ошибки и исчезнут после исправления первой ошибки.


После исправления вышеизложенного вы получите новую ошибку, которая не была обнаружена ранее:
error: could not convert ‘name.std::basic_string<...>’ to ‘bool’
То std:string оператор присваивания возвращает ссылку на саму строку, которая не может быть преобразована в bool. Он может быть исправлен в соответствии с другими решениями (вы использовали оператор присваивания = вместо оператора сравнения ==).


Member 13479017

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

Jochen Arndt

Спасибо Вам за ваши отзывы и принятие моего решения.

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

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

Рейтинг:
1

Dave Kreskowiak

В вашем первом if оператор сравнения для равенства равен: ==, нет =.


Member 13479017

Я сделал это, но ничего не изменилось. Все ошибки никуда не делись.

Dave Kreskowiak

Точно такие же ошибки, все до единой из тех, что вы опубликовали?

Jochen Arndt

Да.
Ошибка оператора присваивания (она должна быть, потому что std::string не может быть преобразована в bool) не обнаруживается компилятором из-за ошибки в строке 14 (которая не соответствует разнесенным строкам, но указана в вопросе).

Dave Kreskowiak

Ну, я пропустил эту маленькую строчку внизу поста.

Эта строка должна быть:

    int main()

Да, скобки имеют значение, даже если они пусты.

Рейтинг:
1

SalmanMushtaq

В вашем коде

if(name = "done")

Удалите это и используйте эту строку
if(name == "done")

Это все.


Рейтинг:
0

Patrice T

Попробуйте что-нибудь вроде:

if (name == "done")