Подтвердить что ты не робот

Идентификатор не найден ошибкой при вызове функции

У меня есть программа здесь, где я инвертирую случай введенной строки. Это код в моем .cpp файле, и я использую Visual Studio С++ IDE. Я не уверен, что мне нужно в файле заголовка, или если мне это нужно, чтобы сделать эту работу.

Ошибка с моей функцией call swapCase. Main не видит swapCase по какой-то причине, о которой я не уверен.

#include <cctype>
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    char name[30];
    cout<<"Enter a name: ";
    cin.getline(name, 30);
    swapCase(name);
    cout<<"Changed case is: "<< name <<endl;
    _getch();
    return 0;
}

void swapCase (char* name)
{
    for(int i=0;name[i];i++)
    {
        if ( name[i] >= 'A' && name[i] <= 'Z' )
            name[i] += 32; //changing upper to lower
        else if( name[i] >= 'a' && name[i] <= 'z')
            name[i] -= 32; //changing lower to upper
    }
}

Приветствуются любые другие советы по синтаксису или семантике.

4b9b3361

Ответ 1

Добавьте эту строку перед основной функцией:

void swapCase (char* name);

int main()
{
   ...
   swapCase(name);    // swapCase prototype should be known at this point
   ...
}

Это называется форвардным объявлением: компилятор должен знать прототип функции при компиляции вызова функции.

Ответ 2

В отличие от других языков, к которым вы можете привыкнуть, все, что должно быть в С++, должно быть объявлено до его использования. Компилятор будет читать ваш исходный файл сверху вниз, поэтому, когда он доходит до вызова swapCase, он не знает, что это такое, поэтому вы получаете сообщение об ошибке. Вы можете объявить свою функцию впереди main с помощью строки, подобной этой:

void swapCase(char *name);

или вы можете просто переместить всю эту функцию перед основным файлом. Не беспокойтесь о том, что в нижней части файла есть, по-видимому, самая важная функция (основная). Это очень распространено в C или С++ для этого.

Ответ 3

В то время, когда компилятор встречает вызов swapCase в main(), он не знает о функции swapCase, поэтому он сообщает об ошибке. Вы можете либо переместить определение swapCase над основным, либо объявить регистр подкатегорий над основным:

void swapCase(char* name);

Кроме того, 32 в swapCase заставляет читателя останавливаться и удивляться. Комментарий помогает! В этом контексте он добавил бы ясность для написания

if ('A' <= name[i] && name[i] <= 'Z')
    name[i] += 'a' - 'A';
else if ('a' <= name[i] && name[i] <= 'z')
    name[i] += 'A' - 'a';

Конструкция в моих if-тестах - вопрос личного стиля. Твое было прекрасно. Главное, чтобы изменить имя [i] - использование разницы в "a" и "A" делает более очевидным то, что происходит, и никто не должен задаться вопросом, действительно ли "32". /p >

Успешное обучение!

Ответ 4

Вы должны определить void swapCase перед основным определением.