我有一个程序要求学生姓名和他/她的10个班级。代码假设是为了防止重复的条目,但每次运行程序时都会说每个条目都已存在。我已经经历过这一千次,并且无法弄明白我的生活。任何关于我的问题的见解都将非常感激。
#include <iostream>
using namespace std;
struct student
{
string name;
string classes[10];
};
int main(int argc, char *argv[])
{
string test_name;
student entry;
cout << "Enter the name of the student you wish to insert (string) \n";
cin >> entry.name;
for(int i = 0; i < 9; i++)
{
cout << "Enter class number " << i + 1 << " For " << entry.name << endl;
cin >> test_name;
for(int j = 0; j < 9; j++)
if(test_name == entry.classes[j])
{
cout << "Class already exists for " << entry.name << ". Please try again.\n";
i -= 1;
}
else
{
entry.classes[i] = test_name;
}
}
system("PAUSE");
return EXIT_SUCCESS;
}
答案 0 :(得分:2)
你的内部for
循环测试所有10个位置,包括你要插入新类的位置。
你真的想只扫描填充的位置,查看是否有任何匹配,然后在循环外,添加新类,如果它不是重复的。
的伪代码:
for (i = 0; i < 10; i++)
{
get class 'i';
bool repeat = false;
for (j = 0; j < i; j++) // Only check previous classes (j < i)
if (test_name == entry.classes[j])
{
repeat = true;
break;
}
if (repeat)
{
output the error
rewind 'i'
continue;
} else
{
insert the new entry
}
}
答案 1 :(得分:0)
虽然这是在Java中你可以做类似的事情,我认为它满足了忽略类数组中已经存在的任何输入的要求,并且如果直到达到10个类,则添加它:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) throws IOException {
ArrayList < String > classes = new ArrayList < String > ();
System.out.println("Enter the name of the student you wish to insert (string) \n");
while (classes.size() < 10) {
BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System. in ));
String s = bufferRead.readLine();
for (String classy: classes) {
if (classy.equals(s)) {
System.out.println("This is duplicate class");
break;
}
}
classes.add(s);
}
System.out.println("Ten Classes have been input");
}
}
答案 2 :(得分:0)
要真正看到,在if()
声明之前添加此行有什么问题:
cerr << "test_name == \"" << test_name << "\", entry.classes[j] == \"" << entry.classes[j] << "\"\n"
我希望,你看到的是,test_name由于某种原因是空的,我知道所有未初始化的字符串都会显示为空字符串。但是,无论出现什么问题,上面的一行都应该显示出来。