【问题标题】:expected '}' at end of input in my program main function在我的程序主函数中的输入末尾预期'}'
【发布时间】:2011-03-24 19:09:13
【问题描述】:

这个程序应该教函数。我已将每个函数分离到头文件中。我认为某处有一个大括号向后或丢失,但我已经盯着这个程序看了好几个小时,并尝试重新安排一些东西,但似乎没有任何进展。

这个程序应该读取一个电话号码并打印出来。如果提供了字母,那么它将在将其设为大写字母后,将其排序为数字 0-9,就像电话键盘上一样。它还会返回无效字符等的错误代码,由 switch 语句控制。

主要功能

我遇到的一个错误是在最后一行的右大括号上:

输入结束时应为“}”

#include <iostream>
#include <cctype>
#include "Read_Dials.h"
#include "To_Digit.h"
#include "Acknowledge_Call.h"

using namespace std;


int main()
{
    char digit1, digit2, digit3, digit4, digit5, digit6, digit7, digit8;
    int return_value = 0;

    return_value = int Read_dials(digit1, digit2, digit3, digit4, digit5, digit6, digit7, digit8);

    if (return_value != -5)
        break;

        switch(return_value){

            case -1:
            cout << "ERROR - An invalid character was entered. Please try again, only numbers or letters this time." << endl;
                break;
        case -2:
            cout << "ERROR - Phone number cant start with 0." << endl;
                break;
        case -3:
            cout << "ERROR - This isn't the movies, Phone numbers dont start with \" 555 \" here buddy :/" << endl;
                break;
        case -4:
            cout << "ERROR - Please make sure the hyphen is in position 4." << endl;
                break;
            default:
                void Acknowledge_Call(digit1, digit2, digit3, digit4, digit5, digit6, digit7, digit8);
        }
return 0;
}

Read_Dials 函数

这个函数没有错误

int Read_Dials(char &num1, char &num2, char &num3, char &num4, char &num5, char &num6, char &num7, char &num8)
{

#include "To_Digit.h"

int i = 0;

    do{
    i++;
    cout << "Please enter the character for position #" << i << " in the phone number\n";
    cout << "NOTE: Please put the hyphen \" - \" in the fourth position and use \"Q\"to quit." << endl;
    char temp;
    cin >>temp;

        if (i = 1 && temp == 0)
        {
            return_value = -2;
        }
        else if (i == 1 && (temp == 'q' || temp == 'Q'))
        {
            return_value -5;
        }

        else if (i == 1)
        {
            temp = &num1;
            &inputValue = &num1;
            int To_Digit(char &num1);       
        }
        else if (i == 2)
        {
            temp = &num2;
            &inputValue = &num2;
            int To_Digit(char &num2);
        }
        else if (i == 3)
        {
            temp = &num3;
            &inputValue = &num3;
            int To_Digit(char &num3);
        }
        else if (&num1 == '5' && &num2 == '5' && &num3 == '5')
        {
            return_value -3;
        }
        else if (i == 4 && temp != '-')
        {
            return_value -4;
        }
        else if (i == 5)
        {
            temp = &num5;
            &inputValue = &num5;
            int To_Digit(char &num5);
        }
        else if (i == 6)
        {
            temp = &num6;
            &inputValue = &num6;
            int To_Digit(char &num6);
        }
        else if (i == 7)
        {
            temp = &num7;
            &inputValue = &num7;
            int To_Digit(char &num7);
        }
        else if (i == 8)
        {
            temp = &num8;
            &inputValue = &num8;
            int To_Digit(char &num8);
        }
    }while (i < 8)
    return 0;
}

To_Digit 函数

我得到的第二个也是最后一个错误在这里,在第二行(左大括号):

在'{'标记之前不允许函数定义

int To_Digit(char &inputValue)
{

char &inputValue;

    if (isdigit(&inputValue))
        break;

    &inputValue = toupper(&inputValue);

    switch(&inputValue){

        case 'A': case 'B': case 'C':
            &inputValue = '2'; 
                break;

        case 'D': case 'E': case 'F':
            &inputValue = '3'; 
                break;

        case 'G': case 'H': case 'I':
            &inputValue = '4'; 
                break;

        case 'J': case 'K': case 'L':
            &inputValue = '5'; 
                break;

        case 'M': case 'N': case 'O':
            &inputValue = '6'; 
                break;

        case 'P': case 'Q': case 'R': case 'S':
            &inputValue = '7'; 
                break;

        case 'T': case 'U': case 'V':
            &inputValue = '8'; 
                break;

        case 'W': case 'X': case 'Y': case 'Z':
            &inputValue = '9'; 
                break;
        default:
            return -1;

    }
}

Acknowledge_Call 函数

这个函数没有错误。

void Acknowledge_Call(digit1, digit2, digit3, digit4, digit5, digit6, digit7, digit8)
{
    cout << "Phone number entered is: " << digit1 << digit2 << digit3 << digit4 << digit5 << digit6 << digit7 << digit8 << endl;
}

这段代码有什么问题?我该如何解决?

【问题讨论】:

  • 这是无法阅读的。您应该编辑您的帖子以提高可读性。
  • 请通过使用代码块并包括编译器错误来编辑您的问题,使其更加清晰易读。
  • 我猜问题出在您的某个头文件中,而不是在 cpp 中。
  • 找到并使用文本框上方的{} 来格式化您的代码。

标签: c++ compilation syntax-error curly-braces


【解决方案1】:

我还没有尝试自己运行代码,但我能看到的唯一看起来很奇怪的是在“Read_Dials”函数中......不要在函数中放置#INCLUDE 语句。始终将这些语句放在文件的顶部。

移动#include,让我们知道它的作用。 祝你好运。

【讨论】:

  • 如果 #include 是缺少 } 错误的原因,我不会感到惊讶。
【解决方案2】:
 default:
     void Acknowledge_Call(digit1, digit2, digit3, digit4, digit5, digit6, digit7, digit8);

调用函数时不使用返回类型。所以,放弃voiddefault case 也应该有 break,否则它会失败


int Read_Dials(char &num1, char &num2, char &num3, char &num4, char &num5, char &num6, char &num7, char &num8)
{

   #include "To_Digit.h"  // The header actually has a definition. Preprocessor 
                          // copies the content of To_Digit.h here. So, you have
                          // a function definition inside another function while 
                          // compilation phase which is not allowed. So remove
                          // it and place it at top of the file.
   // .....

}

【讨论】:

    【解决方案3】:

    您的#includes 应该在文件的顶部...

    if (return_value != -5)
        break;
    

    (in main) 是不允许的,因为没有循环可以跳出

    【讨论】:

      【解决方案4】:

      这里有一些问题(除了你没有提供头文件):

      1. main()中“默认”后的函数声明
        删除函数调用前面的void

      2. Acknowledge_Call 的声明中未指定参数的类型
        改为:
        void Acknowledge_Call(char digit1, char digit2, char digit3, char digit4, char digit5, char digit6, char digit7, char digit8)

      3. 删除main函数中Read_dials前面的int

      4. main() 中,更改 'Read_dialstoRead_Dials:
        The C++ language is case-sensitive, thus 'dials
        != Dials != dIaLs

      5. main()函数中从if之后删除break
        你想要return 1;return EXIT_FAILURE;exit(1);

      6. 记得将这些行添加到Acknowledge_Calls.cpp

        #include "acknowledge_call.h"
        #include &lt;iostream&gt;
        using namespace std;

      7. 记得将这些行添加到Read_Dials.cpp

        #include "read_dials.h"
        #include &lt;iostream&gt;
        using namespace std;

      8. Read_Dials.cpp 中,将#include "To_Digit.h 移动到文件顶部。

      9. 在全部执行函数时,不要将返回类型和参数类型放在调用中。
        例如,使用:
        num1 = To_Digit(digit1);
        而不是
        int To_Digit(char &amp;num1);

      你需要和你的导师就如何调用函数和传递参数进行一次长谈(这一次,请仔细听)。另外,请阅读一本关于 C++ 的书籍。

      【讨论】:

        猜你喜欢
        • 2014-04-11
        • 1970-01-01
        • 2018-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-11
        相关资源
        最近更新 更多