printf("**"); while (1) { char ch = getchar(); if (ch == 8) printf("\b "); } 这是一段c语言代码,为什么if语句没有识别到ch变量是退格键,并删除一个星号
时间: 2024-01-12 21:04:08 浏览: 72
和上一个问题类似,这段C语言代码的主要作用也是在屏幕上输出两个星号并且实现类似于密码输入框的效果。每当用户输入一个字符时,会将输入的字符替换成空格。
同样的,这段代码中的if语句无法识别退格键是因为它没有正确判断输入的字符是否是退格键。
在C语言中,退格键的ASCII码为8,因此if语句应该判断输入的字符是否等于8,而不是'8'字符。修改if语句的条件判断语句如下:
```
if (ch == 8)
```
这样就可以正确判断用户输入的字符是否是退格键了。
相关问题
printf("***"); while (1) { char ch = getchar(); if (ch == 8) printf("\b "); } 这是一段c语言代码,为什么if语句没有识别到ch变量是退格键,并删除一个星*号
这段C语言代码的主要作用是在屏幕上输出一行星号并且实现类似于密码输入框的效果。每当用户输入一个字符时,会将输入的字符替换成空格。
但是,这段代码中的if语句无法识别退格键是因为它没有正确判断输入的字符是否是退格键。
在C语言中,退格键的ASCII码为8,因此if语句应该判断输入的字符是否等于8,而不是'8'字符。修改if语句的条件判断语句如下:
```
if (ch == 8)
```
这样就可以正确判断用户输入的字符是否是退格键了。
把这段代码从C语言改为C++语言 int s1, s2, len, terminal[m*2]; char ch; for(i = 0; i < m; ++i) { scanf("%d", &s1); s1--; terminal[i*2] = s1; ch = getchar(); while(ch != '\n') { scanf("%d %d", &len, &s2); s2--; if(D[s1][s2] == -1 || D[s1][s2] > len) { D[s1][s2] = len; D[s2][s1] = D[s1][s2]; } s1 = s2; ch = getchar(); } terminal[i*2 + 1] = s1; }
在C++中,可以使用cin和cout代替scanf和printf函数。以下是将此代码转换为C++的方式:
```
int s1, s2, len, terminal[m*2];
char ch;
for(int i = 0; i < m; ++i)
{
cin >> s1;
s1--;
terminal[i*2] = s1;
ch = getchar();
while(ch != '\n')
{
cin >> len >> s2;
s2--;
if(D[s1][s2] == -1 || D[s1][s2] > len)
{
D[s1][s2] = len;
D[s2][s1] = D[s1][s2];
}
s1 = s2;
ch = getchar();
}
terminal[i*2 + 1] = s1;
}
```
请注意,由于在C++中,数组的大小必须在编译时确定,因此可以考虑使用vector代替数组。以下是使用vector的代码:
```
int s1, s2, len;
char ch;
vector<int> terminal(m*2);
for(int i = 0; i < m; ++i)
{
cin >> s1;
s1--;
terminal[i*2] = s1;
ch = getchar();
while(ch != '\n')
{
cin >> len >> s2;
s2--;
if(D[s1][s2] == -1 || D[s1][s2] > len)
{
D[s1][s2] = len;
D[s2][s1] = D[s1][s2];
}
s1 = s2;
ch = getchar();
}
terminal[i*2 + 1] = s1;
}
```
阅读全文