C语言字符串输入与输出

2025-01-20 20:12:24
推荐回答(3个)
回答1:

因为你使用的是scanf函数。它会将屏幕中的输入读到缓冲区。
scanf这个函数只有遇到非格式字符或者回车才会结束。
例如scanf("%d",&x); 如果输入的内容不是"%d"(也就是整数)格式的时候,函数才会结束。
比如你这里:scanf("%c",&ch);你要求的格式为"%c",只有接收到不是"%c"字符格式的时候scanf才结束。

我详细解释一下你的程序执行过程你就明白了。
当你输入"Go west,young man!"的时候,敲下回车scanf函数才会在第一次结束。
然后它会把第一个字母'G'给到ch,缓冲区里面还留有"o west,young man!",然后进入while循环。
在循环中先将ch的值字母G打印出来,但是这个时候缓冲区里面还留有"o west,young man!"。
因此再执行scanf的时候会直接把缓冲区的内容给ch,但是ch只能接收一个,就这样把你输入的字符串一个一个的赋给ch,然后打印出来。当遇到g的时候就结束了。
因为你之前已经一次性把字符串读到了缓冲区,scanf就直接从缓冲区拿字符给ch,所以你不会收到要求输入的提示。

回答2:

scanf("%c",&ch);的作用是从标准输入设备文件(键盘)中读取一个字符!
当你输入一个字符并按下回车时,这个字符先存放在输入文件的缓冲区内,再由scanf从缓冲区内读取它!
当你输入一个字符串时,同样整个字符串也是先存入缓冲区内,再才能被读取!
所以你的情况是成功读取一个字符后,执行一会儿指令,再接着从缓冲区内读取下一个字符,如此反复,直到ch='g'停止!

回答3:

ch是输入一个字符啊,scanf输入字符碰到回车就结束啊,有请求输入啊,只要你不输入g,就会一直要输入,当你输入的字符中有g,程序就结束了啊,只输出前面不是g的部分