#include <stdio.h>
int main(void)
{
char c1;
for(;;){
printf("继续输入:");
scanf("%c", &c1);
if(c1!='Y') break;
printf("go on\n");
}
printf("go out\n");
return 0;
}
为什么第二次循环时不等用户输入就跳到go out
因为前一次输入之后的换行 , 被下一次接收了,所以 没有输入, 判断不等于 Y ,直接退出了
【以下回答由 GPT 生成】
问题的原因在于使用 fmt.Scanf("%c", &c1)
函数时,它会读取用户输入字符串中的一个字符,并将其赋值给变量 c1
。但是 fmt.Scanf
函数会将用户输入字符串中的换行符\n
也作为一个字符读取,导致程序在第二次循环时直接读取到换行符 \n
,而不是等待用户输入。
为了解决这个问题,我们可以改用 bufio.NewReader(os.Stdin).ReadString('\n')
函数来读取用户输入的一行字符串,然后判断这行字符串的第一个字符是否为 'Y'。
以下是修复后的代码示例:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
for {
fmt.Print("继续输入:")
input, _ := reader.ReadString('\n')
if input[0] != 'Y' {
break
}
fmt.Println("go on")
}
fmt.Println("go out")
}
现在,程序会等待用户输入一行字符串,并将字符串的第一个字符与 'Y' 进行比较。如果不为 'Y',则跳出循环并打印 "go out"。如果为 'Y',则继续循环并打印 "go on"。
这样就解决了第二次循环时不等待用户输入而直接跳出循环的问题。