2016-01-23 2 views
1

Я пытаюсь распечатать метку и класс письма в одной строке, но я не могу назвать функцию void в инструкции cout, есть ли способ сделать это? Также я понимаю, что я могу вызвать его на следующей строке после инструкции cout, но мне нужно, чтобы они печатались в одной строке.Как я могу назвать функцию void в инструкции cout?

void printLetterGrade(float mark) 
{ 
    float grade = mark; 

    if (grade >= 90) 
     cout << "Your Letter Grade is A+" << endl; 

    else if ((grade >= 85) && (grade <= 89)) 
     cout << "Your Letter Grade is A" << endl; 

    else 
     cout << "fail" << endl; 

} 

float calculateClassStats(float marks[], int length) 
{ 
    const int arrayCount = length; 
    for (int x = 0; x < arrayCount; x++){ 
     char letter = printLetterGrade(marks[x]); 
     cout << marks[x] << letter << endl; 
    } 
    return 0; 
} 
+3

Почему вы хотите напечатать функцию недействительным? Либо вызовите функцию перед печатью, либо измените тип возврата. – erip

ответ

-1

изменить свой COUT заявление как

cout<<printLetterGrade(marks[x])<<marks[x]; 

удалить также char letter = printLetterGrade(marks[x]); линию, это кажется ненужным.

Edit: модифицированный код будет тогда:

void printLetterGrade(float mark) 
{ 
float grade = mark; 

if (grade >= 90) 
    cout << "Your Letter Grade is A+" << endl; 

else if ((grade >= 85) && (grade <= 89)) 
    cout << "Your Letter Grade is A" << endl; 

else 
    cout << "fail" << endl; 

} 

float calculateClassStats(float marks[], int length) 
{ 
const int arrayCount = length; 
for (int x = 0; x < arrayCount; x++){ 
    cout<<marks[x]; 
    printLetterGrade(marks[x]); 
} 
return 0; 
} 
+0

это дало бы мне ошибку: «не может преобразовать printlettergrade() в тип const unsigned char – sickguy

+0

удалить char letter = printLetterGrade (метки [x]); Если вы хотите напечатать класс, используйте вместо него инструкцию cout в функции printLetterGrade. –

+0

Рассмотрите возможность возврата экземпляра выходного потока, аналогичного перегрузке 'operator <<'. –

0

печати как в той же функции

void printLetterGrade(float mark) 
{ 
    float grade = mark; 

    if (grade >= 90) 
     cout <<mark<< "Your Letter Grade is A+" << endl; 

    else if ((grade >= 85) && (grade <= 89)) 
     cout <<mark<< "Your Letter Grade is A" << endl; 

    else 
     cout << "fail" << endl; 

} 

float calculateClassStats(float marks[], int length) 
{ 
    const int arrayCount = length; 
    for (int x = 0; x < arrayCount; x++){ 
     printLetterGrade(marks[x]);    
    } 
    return 0; 
} 
6

Вы должны изменить printLetterGrade таким образом, что он делает возвращение что-то. Например.

const char *printLetterGrade(float mark) 
{ 
    if (...) 
     return "A+"; 
    if (...) 
     return "A"; 
    ... 
} 

(Конечно, на данный момент, вы можете вызвать функцию что-то другое тоже)

+0

Это самый разумный ответ.'std :: cout <<« Ваша оценка вашего письма «<< getLetterGrade (отметка) <<» со степенью «<< отметка << '\ n';' – erip

+0

Будет ли способ печати как на том же линии без изменения моей функции пустоты? – sickguy

+0

Да, добавьте инструкцию cout в свою функцию void и вызовите ее после инструкции cout в вашей функции calculateClassStats. –

0

Если вы хотите напечатать что-то на той же строке, просто не напечатать endl:

void printLetterGrade(float mark) 
{ 
    float grade = mark; 

    if (grade >= 90) 
     cout << "Your Letter Grade is A+" << endl; 

    else if ((grade >= 85) && (grade <= 89)) 
     cout << "Your Letter Grade is A" << endl; 

    else 
     cout << "fail" << endl; 

} 

float calculateClassStats(float marks[], int length) 
{ 
    const int arrayCount = length; 
    for(int x = 0; x < arrayCount; x++) { 

     cout << marks[x] << " "; // don't print endl, just a space 
     printLetterGrade(marks[x]); // goes on same line 
    } 
    return 0; 
} 
+0

awesome thanks friends – sickguy

0

Вы не cout результат void функции или может кастовал void к чему-то, чтобы использовать на cout, так как нет ничего возвращается.

Если все, что вам нужно, это побочный эффект вашей функции printLetterGrade и побочный эффект иметь место именно в определенный момент в cout последовательности, вы можете изменить его возвращение к чему-то тривиальным, что не печатает,

например, вы можете изменить тип возврата от void до char * или string и вернуть пустую строку "" везде, где у вас был оператор return; (если есть).

0
float calculateClassStats(float marks[], int length) 
{ 
    const int arrayCount = length; 
    for (int x = 0; x < arrayCount; x++) 
    { 

     cout << marks[x] << printLetterGrade(marks[x]) << endl; 
    } 
    return 0; 
} 

Просто измените возвратный тип в string и изменить cout << к return.

string printLetterGrade(float mark) 
{ 
    float grade = mark; 

    if (grade >= 90) 
     return " Your Letter Grade is A+"; 

    else if ((grade >= 85) && (grade <= 89)) 
     return " Your Letter Grade is A"; 

    else 
     return " Fail"; 

} 

Выход

95 Your Letter Grade is A+ 
88 Your Letter Grade is A 
50 Fail 
Смежные вопросы