C语言字符串输入与输出

#include<stdio.h>

int main(void)
{
char ch;
scanf("%c",&ch);
while(ch!='g'){
printf("%c",ch);
scanf("%c",&ch);}
return 0;
} 运行后输入:Go west,young man!
输出:Go west,youn
char字符容量不是一个字符吗? ch是一个非数组变量为什么能输出字符串?
根据顺序编译,应该每判断一次 ch!='g',请求输入一次,为什么整个过程都不请求输入?
求知中!请务必每个问题都解释下!谢谢!!

因为你使用的是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,所以你不会收到要求输入的提示。追问

嗯!也就是说循环里的那个 scanf("%c",&ch);使缓存的剩余的字符输出来了!!?

追答

scanf优先看文件缓冲区是否有可用的字符,如果有的话会直接给到参数的,如果没有就提示你输入。
循环里面的scanf把缓冲区的内容一个一个给到了ch,输入是由printf执行的。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-16
scanf("%c",&ch);的作用是从标准输入设备文件(键盘)中读取一个字符!
当你输入一个字符并按下回车时,这个字符先存放在输入文件的缓冲区内,再由scanf从缓冲区内读取它!
当你输入一个字符串时,同样整个字符串也是先存入缓冲区内,再才能被读取!
所以你的情况是成功读取一个字符后,执行一会儿指令,再接着从缓冲区内读取下一个字符,如此反复,直到ch='g'停止!追问

如果下面没那个循环的话 那是不是说只能显示第一个字符?

追答

嗯,就是这样:scanf("%c",&ch);中的控制字符%c决定它每次只能从缓冲区内读取一个!

追问

在循环中应该是显示一个字符 然后接下然又有一个提示输入把!!怎么没有?循环中的那个scanf("%c",&ch);也从缓存读取吗?

追答

这个它先检查缓冲区有没有可用字符,没有的话才会让你输入的!
下面这个你试一下,就可以理解了!
#include
int main(void)
{
char ch;
scanf("%c",&ch);
while(ch!='g'){
fflush(stdin);//如果给出的文件流是一个输出流,那么fflush()把输出到缓冲区的内容写入文件. 如果给出的文件流是输入类型的,那么fflush()会清除输入缓冲区.
printf("%c",ch);
scanf("%c",&ch);}
return 0;
}

本回答被提问者采纳
第2个回答  2013-01-16
ch是输入一个字符啊,scanf输入字符碰到回车就结束啊,有请求输入啊,只要你不输入g,就会一直要输入,当你输入的字符中有g,程序就结束了啊,只输出前面不是g的部分

在C语言中如何实现用键盘输入一个字符串,并打印出来
在C语言中输入并打印字符串的编程方法如下:定义一个存放字符串的数组空间,比如为字符串分配100个数组空间。使用gets()函数获取键盘输入的字符串,输入格式为gets(定义的字符数组名)。使用puts()函数输出之前输入的字符串,输出格式为puts(定义的字符数组名)。运行程序后,成功实现输入字符串并原样在屏...

在C语言中如何实现用键盘输入一个字符串,并打印出来
在C语言中实现用键盘输入字符串并打印的方法步骤如下:首先,需定义一个数组空间用于存放字符串,例如分配100个数组单元。接着,使用gets()函数读取键盘输入的字符串,调用格式为gets(字符数组名)。然后,应用puts()函数输出之前读取的字符串内容,使用方法为puts(字符数组名)。最后,运行程序,即可成功实...

在C语言中如何实现用键盘输入一个字符串,并打印出来
在C语言中输入字符串后然后打印出来的编程方法如下:1. 首先需要先定义一个存放字符串的数组空间,如给字符串100个数组空间。2.接着使用gets()函数来获取键盘输入的字符串。一般格式为gets(定义的字符数组名)。3.然后再使用puts()函数来输出之前输入的字符串内容。一般格式puts(定义的字符数组名)。4...

C语言字符和字符串的输入与输出
输入:`i am working`输出:`i am working`此外,C语言还提供了gets和puts函数进行字符串的输入与输出。使用gets函数读取字符串时,输入以回车结束,并自动添加终止符`'\\0'`。而puts函数用于输出字符串,输出后自动换行。示例代码如下:include <stdio.h> int main() { char str[20];printf("请...

c语言中怎么输出字符串?
1、首先我们新建一个dev C++的项目。2、接下来在项目中新建C语言程序文件。3、然后在C语言文件中声明一个字节数组。4、接下来我们通过printf函数提示用户输入字符串,通过scanf接收用户输入的字符串。5、接着在通过printf函数输出用户输入的内容。6、最后运行C语言程序,我们输入内容以后就可以输出了。在C...

如何用一个C语言实现字符串输入输出?
1,输入部分 只有一个输入内容是一个字符串,因此定义一个局部变量char 数组,scanf直接读入输入的字符串。2,字符串处理 a,使用同一个字符串保存输出内容 b,定义另一个char数组保存输出的内容 3,算法 循环字符串的每一个字符:判断是否是小写字母 ( ch >= 'a' && ch <='z')true: ch -=...

c语言字符串数组怎么输入和输出呢
在C语言中,有两个函数可以在控制台(显示器)上输出字符串,它们分别是:puts():输出字符串并自动换行,该函数只能输出字符串。printf():通过格式控制符%s输出字符串,不能自动换行。除了字符串,printf() 还能输出其他类型的数据。这两个函数相信大家已经非常熟悉了,这里不妨再演示一下,请看下面的...

在C语言中如何实现用键盘输入一个字符串,并打印出来?
在C语言中实现用键盘输入一个字符串,并打印出来的解决方法如下:1、首先定义一个字符串数组,如你可以给字符串100个数组空间。如图括号内数字即为你定义的数组大小。2、gets()函数用来获取键盘输入的字符串,括号内的s即为字符串变量。3、接着用puts()函数输出之前我们从键盘读取的字符串。括号内为...

c语言中关于字符的输入输出问题。 我想知道输入scanf(%c,a[i...
putchar 函数是字符输出函数, 其功能是在显示器上输出单个字符。getchar函数的功能是从键盘上输入一个字符。 函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。printf 函数称为格式输出函数.一般形式为:printf(“格式控制字符串”,输出表列)scanf 函数在本质上也是...

C语言上中怎么样直接输入输出一个字符串
C语言中字符串的输入和输出主要有两种方式:输入使用:scanf("%s",a);对应的输出使用:printf("%s\\n",a);输入使用:gets(b);对应的输出使用:puts(b);字符串或串(String)是由数字、字母、下划线组成的一串字符。一般记为 s="a1a2···an"(n>=0)。它是编程语言中表示文本的数据类型。在...

相似回答