如何在数组中存储用户输入并检查两个数组是否具有相同的元素

问题描述

我正在尝试做一个测验检查器,用户将在其中输入答案,它将自动检入数组。有提示吗?

这是我的代码:

int main()
{
     string aswer[] = { "D","C","D","A"); // 
     char input[5];
     int counter ;
     int points = 0;
     cout << "Welcome and Good luck!\n";

            for (counter = 0; counter < 5; counter++) {
                cout << counter << " Choose from letters A-D: \n";
                cin >> input;
            }
           for (int i = 0; i < 5; ++i) {
                cout << "\n you enter " << input[i] << endl;
            }
            foreach (char item in answer){
                foreach (char item1 in inputs){
                    If (item == item1){
                    points = points +1  
                }
            }

           }
    return 0;
      }

解决方法

提示-选择存储时要保持一致。如果您为std::string使用answer(未显示std::string的错误数组),则也为std::string使用input。但是,如果必须使用POA(普通的老式数组),这对于教育目的是很好的-您只是缺少所有自动内存管理和边界保护。

您将std::basic_string初始化为:

    std::string answer { "DCDDA" };    /* initialize string (not array of strings) */

注意:使用std::名称空间标识符。请参见Why is “using namespace std;” considered bad practice?

请勿在代码中使用魔术数字。您在数组声明中使用的5和循环限制中的 Magic Number 。相反,

#define NCHAR 5     /* if you need a constant,#define one (or more) */
...
    char input[NCHAR];                 /* array of 5 char (why not string?) */
    ...
    for (int i = 0; i < NCHAR; i++) {   /* loop taking input */

循环输入时,请验证每个输入。用户很可能会生成手册EOF来取消 Ctrl + d (或Windows上的 Ctrl + z )输入。仅在验证输入后才增加存储的字符数,例如

    int counter = 0,points = 0;       /* counter and points,initialized zero */
    
    std::cout << "Welcome and Good luck!\n\n";

    for (int i = 0; i < NCHAR; i++) {   /* loop taking input */
        std::cout << "  " << i << ".  Choose from letters A-D: ";
        if (std::cin >> input[i])       /* validate input */
            counter++;                  /* only increment on successful input */
    }

对于您的输出,请了解使用'\n'std::endlC++: “std::endl” vs “\n”之间的区别。

当您将项目存储在容器中(例如std::string)时,可以使用Range-based for loop (since C++11)遍历容器中的每个项目。要循环存储的输入,必须将循环限制为成功读取为输入的元素数。使用与您的比较限制相同的counter,例如

    for (auto& item : answer)           /* range based for-loop over chars in string */
        for (int i = 0; i < counter; i++)   /* loop over counter chars in array */
            if (item == input[i])       /* if the item matches the input char */
                points += 1;            /* add point */

将其完全放在一起,您将:

#include <iostream>
#include <string>

#define NCHAR 5     /* if you need a constant,#define one (or more) */

int main()
{
    std::string answer { "DCDDA" };    /* initialize string (not array of strings) */
    char input[NCHAR];                 /* array of 5 char (why not string?) */
    int counter = 0,initialized zero */
    
    std::cout << "Welcome and Good luck!\n\n";

    for (int i = 0; i < NCHAR; i++) {   /* loop taking input */
        std::cout << "  " << i << ".  Choose from letters A-D: ";
        if (std::cin >> input[i])       /* validate input */
            counter++;                  /* only increment on successful input */
    }
    
    std::cout << "\nYou entered:\n";    /* output stored values */
    for (int i = 0; i < counter; i++)   /* looping only 0 to counter */
        std::cout << "  input[" << i << "] : " << input[i] << '\n';
    
    for (auto& item : answer)           /* range based for-loop over chars in string */
        for (int i = 0; i < counter; i++)   /* loop over counter chars in array */
            if (item == input[i])       /* if the item matches the input char */
                points += 1;            /* add point */
    
    std::cout << "\nTotal points: " << points << '\n';  /* output total points */
}

使用/输出示例

$ ./bin/points
Welcome and Good luck!

  0.  Choose from letters A-D: A
  1.  Choose from letters A-D: B
  2.  Choose from letters A-D: C
  3.  Choose from letters A-D: D
  4.  Choose from letters A-D: E

You entered:
  input[0] : A
  input[1] : B
  input[2] : C
  input[3] : D
  input[4] : E

Total points: 5

检查所有字符是否匹配的最大点数:

$ ./bin/points
Welcome and Good luck!

  0.  Choose from letters A-D: D
  1.  Choose from letters A-D: C
  2.  Choose from letters A-D: D
  3.  Choose from letters A-D: D
  4.  Choose from letters A-D: A

You entered:
  input[0] : D
  input[1] : C
  input[2] : D
  input[3] : D
  input[4] : A

Total points: 11

仔细研究一下,如果您有任何疑问,请告诉我。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...