【发布时间】:2015-07-23 00:37:24
【问题描述】:
我正在尝试制作一个程序来查找 Hangman 游戏中最常见的角色。我希望用户在标准输入中输入电影名称列表(由 Enter 分隔)。电影名称的长度可变。
但是,在输入 MOVIE_NAME_SIZE 的所有字符之前,程序不会停止接受输入。我尝试检查“\0”和“\n”。它似乎不起作用。我做错了什么?另外,有没有更简单的方法可以做到这一点?
附: - 很抱歉,如果以前有人问过这个问题。我看了看,有人建议使用 getline() 方法,但这是针对整个字符串的,而我需要访问单个字符。
char movieList[MAX_MOVIES][MAX_NAME_SIZE];
char CapitalAlphabetList[26] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
char smallAlphabetList[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
char numberList[10] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
int alphabetCount[26] = {0};
int numberCount[10] = {0};
int i, j, k;
for(i = 0; i < MAX_MOVIES; i++)
{
for(j = 0; j < MAX_NAME_SIZE; j++)
{
cin >> movieList[i][j];
if(movieList[i][j] == '\0')
break;
for(k = 0; k < 26; k++)
if((movieList[i][j] == smallAlphabetList[k]) || (movieList[i][j] == CapitalAlphabetList[k]))
alphabetCount[k]++;
for(k = 0; k < 10; k++)
if(movieList[i][j] == numberList[k])
numberCount[k]++;
}
}
【问题讨论】:
-
您为什么不检查
"STOP"或"NONE"而不是将cin抓取的任何内容作为最后一个字符。在临时变量上使用cin然后检查size == 0怎么样? -
@Matt 我不明白。你能详细说明一下吗?用户不会输入
"STOP"或"NONE"。它们是关键字吗? -
它们是你必须输入才能让它停止的东西。如果您希望它在没有输入时停止,我会将
cin捕获到一个字符串中,然后检查字符串的长度。如果您不使用std::string,这更像是一个C 问题。唯一类似于 C++ 的就是您对cin的调用 -
@Matt 谢谢!我会试试的。但是,不应该存在替代(更简单)的解决方案吗?因为字符串总是可能无意中包含多个 STOP 或 NONE(电影名称的一部分),但始终只有一个换行符。
-
没有
string,没有vector。见鬼,甚至 C 的isalpha()或isdigit()都没有证据。再次看着这个,我的眼角抽搐了一下……至于getline(),为什么不读取该行,然后在内存中解析它?