C++输入出错
C++ input goes wrong
我正在解决 uva 问题并尝试输入一系列字符串。问题是当我尝试在 While 循环中输入字符串时,第一次输入正常。但在那之后,每个字符串的第一个字符都会被忽略。所以我使用了 __fpurge() 函数并且效果很好。但我无法在 uva Online Judge 网站上使用该功能。如何替换 __fpurge 函数?
char crypt_text[MAXLEN]
int main()
{
char alphabet['z'+1], cryptchar['z'+1];
std::cin>>n;
for(int i=0; i<n; i++)
std::cin>> dictionary[i];
while(1)
{
__fpurge(stdin);
std::cin.getline(crypt_text,MAXLEN,'\n');
if(cin.eof()) break;
for(int i=0; i<'z'+1; i++)
{
alphabet[i] = '[=10=]';
cryptchar[i] = '[=10=]';
}
if(!crypt_kicker(0,alphabet,cryptchar)) print_asterisk();
}
return 0;
}
我觉得你的问题出在__fpurge
For input streams
this discards any input read from the underlying object but not yet
obtained via getc(3);
也许这可以解决您的问题。这是一种更像 C++ 的处理输入的方式。
int main()
{
int n;
std::cin >> n;
// declare dict, whatever it is
for(int i = 0; i < n; i++)
std::cin >> dictionary[i];
const std::size_t len = 'z'+1;
std::array<char, len> alphabet;
std::array<char, len> cryptchar;
std::string crypt_text;
while(std::getline(std::cin, crypt_text))
{
std::fill(std::begin(alphabet), std::end(alphabet), 0);
std::fill(std::begin(cryptchar), std::end(cryptchar), 0);
if(!crypt_kicker(0,alphabet,cryptchar))
print_asterisk();
}
}
我不确定你是否真的想要 len = 'z'+1
而不是 len = 'z'-'a'+1
(std::array
不需要结尾 '[=14=]'
)
我正在解决 uva 问题并尝试输入一系列字符串。问题是当我尝试在 While 循环中输入字符串时,第一次输入正常。但在那之后,每个字符串的第一个字符都会被忽略。所以我使用了 __fpurge() 函数并且效果很好。但我无法在 uva Online Judge 网站上使用该功能。如何替换 __fpurge 函数?
char crypt_text[MAXLEN]
int main()
{
char alphabet['z'+1], cryptchar['z'+1];
std::cin>>n;
for(int i=0; i<n; i++)
std::cin>> dictionary[i];
while(1)
{
__fpurge(stdin);
std::cin.getline(crypt_text,MAXLEN,'\n');
if(cin.eof()) break;
for(int i=0; i<'z'+1; i++)
{
alphabet[i] = '[=10=]';
cryptchar[i] = '[=10=]';
}
if(!crypt_kicker(0,alphabet,cryptchar)) print_asterisk();
}
return 0;
}
我觉得你的问题出在__fpurge
For input streams this discards any input read from the underlying object but not yet obtained via getc(3);
也许这可以解决您的问题。这是一种更像 C++ 的处理输入的方式。
int main()
{
int n;
std::cin >> n;
// declare dict, whatever it is
for(int i = 0; i < n; i++)
std::cin >> dictionary[i];
const std::size_t len = 'z'+1;
std::array<char, len> alphabet;
std::array<char, len> cryptchar;
std::string crypt_text;
while(std::getline(std::cin, crypt_text))
{
std::fill(std::begin(alphabet), std::end(alphabet), 0);
std::fill(std::begin(cryptchar), std::end(cryptchar), 0);
if(!crypt_kicker(0,alphabet,cryptchar))
print_asterisk();
}
}
我不确定你是否真的想要 len = 'z'+1
而不是 len = 'z'-'a'+1
(std::array
不需要结尾 '[=14=]'
)