请教C语言字符串的输入输出问题

2025-12-06 11:41:15
推荐回答(3个)
回答1:

scanf()是以空格或者回车为输入结束标记的。

所以说如果输入acd   yui电脑只读取acd,剩下的会存在键盘缓冲区里,用gets可以解决,它以回车为结束标记。

#include

int main()

{

char a[10];

gets(a);

printf("%s\n",a);

}

第二个问题的话,c语言并未规定越界后的处理办法,所以会一直输入,一直输出。。。

回答2:

  1. scanf("%s",str)函数,是默认“换行”、"空格"、“Tab”等键作为输入完成符的。

        所以:输入i am a student 。i 后面的空格就被当作输入完成符号,后面的字符不再继续接收。

        str[20]=“i”。当然就纸打印i。

  2.  输入 aaaaaaaaaaaaaaaaaaaaaaaaaaa,或类似远远超过20个连续的字母。按理来说,会有                          以下几种情况(各个平台处理机制不一样,出现那种情况是系统自己的事):

        a. 只有前19个符号被录入,后面的被忽略;

        b. 只有前20个符号被录入,后面的被忽略;

        c. 系统弹出错误,因为第21个存储空间可能是不允许访问的(或者其他原因,反正就是提示你错误)。

        d.其他我不知道的系统处理情况。

    3. 解决方法:可以使用gets(str);函数来替换scanf("%s",str)函数;gets函数允许空格作为有效字符。如果你的编译环境支持的话,应当使用gets_s(str,num)函数更安全。

    4.如有不对的情况,恳请指正,thanx.

回答3:

1、scanf以空白符作为定界符,空格、回车、制表符都属于空白符,所以碰到空格就停止了。

如果输入的字符串是以其它字符为定界符的,那怎么办?[]就是专门处理这个问题的转换说明符。[]转换说明符可以通过两种方式产生结果字符集,如果第一个[字符右边没有抑扬符(^),那么处于[]之间的字符就是结果字符集,不在其中的可输入字符都作为定界符;如果左边[符号紧靠一个抑扬符(^),那么意义相反,^和]之间的字符是定界符,其余可输入字符是结果字符集。

楼主的代码可以这么写scanf("%19[^\n]", a);

2、scanf不会管str是否有足够的内存用于接收,会一直往里面写。而printf也比较傻,会一直输出到'\0'为止。虽然可以正常输出,但是数组已经越界了,程序还能够正常执行只是因为越界写的内容目前还没有人使用,不会产生什么问题。