#include<iostream> #include<conio.h> using namespace std; int main() { char ch; string s; for (int i=0;(ch = _getch()) != '\r';) { if (ch != 8) { s[i] = ch; putchar('*'); i++; } else { putchar('\b'); putchar(' '); putchar('\b'); i--; } } } 怎么改正
时间: 2024-04-09 17:29:13 浏览: 60
在你提供的代码中,你尝试使用`_getch()`函数来获取用户输入的字符,并在控制台中显示星号代替实际输入的字符。但是在这个过程中,你可能会遇到一些问题。
首先,你声明了一个`string`类型的变量`s`,但是这个变量没有被初始化,所以在后续的代码中,将字符存储到`s[i]`时会导致未定义的行为。你可以通过使用`s.push_back(ch)`来将字符添加到`s`的末尾。
另外,你使用了`putchar('*')`来输出星号,但是你应该注意到,星号的数量和用户输入的字符数量是不一致的。你可以创建一个字符串`stars`,并在每次输入字符时添加一个星号,然后使用`cout`输出整个字符串。
以下是修改后的代码:
```cpp
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
char ch;
string s;
string stars;
for (int i = 0; (ch = _getch()) != '\r';)
{
if (ch != 8)
{
s.push_back(ch);
stars.push_back('*');
cout << stars;
i++;
}
else
{
if (i > 0) // 只有当输入的字符数量大于0时才进行退格操作
{
putchar('\b');
putchar(' ');
putchar('\b');
s.pop_back();
stars.pop_back();
i--;
}
}
}
cout << endl;
cout << "输入的字符串为: " << s << endl;
return 0;
}
```
这样,你就可以正确地显示星号代替用户输入的字符,并且在用户按下退格键时可以进行相应的处理。最后,输出用户输入的字符串。
阅读全文