为什么getchar()可以消耗换行符
时间: 2023-10-14 20:35:40 浏览: 48
getchar()函数会从标准输入流中读取一个字符,并返回该字符的ASCII码值。当用户在控制台输入一个字符并按下回车键时,实际上会将该字符和一个换行符一起送到标准输入流中。因此,当我们调用getchar()函数时,它会先读取用户输入的字符,然后将换行符从输入流中取出并丢弃,这样就不会出现多余的换行符了。
相关问题
getchar();的目的是什么,干啥用的
`getchar()` 是 C 语言标准库中的一个函数,用于从标准输入(通常是键盘)获取一个字符。在本例中,`getchar()` 的目的是为了消耗输入缓冲区中的换行符,避免它被后续的 `scanf()` 函数误读。
当我们从标准输入中输入一些字符时,这些字符会被存储在输入缓冲区中,等待被程序读取。如果我们使用了 `scanf()` 函数读取了一些输入,但输入缓冲区中还存在未被读取的字符,那么这些字符会被留在输入缓冲区中,等待下一次读取。这在读取带有空格的字符串时特别容易发生问题,因为空格字符会被当做输入结束的标志。
因此,为了避免这种情况,我们可以在每次读取输入之前调用 `getchar()` 函数,消耗掉输入缓冲区中的换行符和其他无用字符,以确保下一次读取的输入是正确的。
为什么这段代码它会重复出现两次功能提示页面
这段代码中出现了两次功能提示页面的原因是因为在 switch 语句中使用了 getchar() 来获取用户输入的选项,并且在每次循环迭代时都会执行一次 getchar()。这会导致每次用户输入一个选项后,getchar() 函数会读取并返回该字符,但换行符 '\n' 仍然留在输入缓冲区中。在下一次循环迭代时,getchar() 函数会读取并返回该换行符,导致程序又会执行一次功能提示页面。
为了解决这个问题,你可以在获取用户输入选项后添加一个额外的 getchar() 调用来消耗换行符。这样,在下一次循环迭代时就不会再读取到换行符,从而避免重复执行功能提示页面。
例如,在 switch 语句的每个 case 分支的末尾添加一个额外的 getchar() 调用:
```cpp
switch(getchar())
{
case '1':
addperson("1","2","3");
getchar(); // 消耗换行符
break;
case '2':
// ...
break;
// ...
}
```
这样就可以解决重复出现两次功能提示页面的问题。