scanf与gets连用,什么时候用gets什么时候用scanf

  scanf与gets连用,什么时候用gets什么时候用scanf

  问:用scanf输入字符串时,如果输入中遇到空格,scanf会把空格前的字符放入后面的字符数组中。那么如果现在的要求不是用空格标记输入结束,而是用最后一个回车结束输入字符串,该怎么办呢?这个问题我也在一些bbs或者论坛上看到问过,答案一般都是用gets()给出的。

  其实scanf完全可以做到这个功能。声明是这样的:

  scnaf("%[^/n]s",str);

  现在详细说说这个功能。首先这个函数是针对% s的,你可以在%和s之间插入[],括号里有一个字符集。如果输入字符串中的字母在这个字符集中,它们将被读入。当您遇到不在此字符集中的第一个字母时,输入将会结束。例如:

  scanf("%[abc]s ",str);

  是:abccbadef

  是:abccba

  其次,括号中有两个特殊字符:和-

  表示“否”的字母,即不出现在该字符集中的字母,将被接受。必须紧接在[之后才能有这个功能,否则会被当作普通字符处理。在上面的例子中,[/n]意味着只要输入的字符没有碰到回车符,就会被接受。

  -表示连接器,如0-9 a-z等。它表示接受或不接受字符的范围。如果要把——作为一个一般人物——对待,就必须立即出现在】。

  此外,如果后括号要用作通用字符,它必须紧接在[或]之后出现。

  你可以在msdn上找到scanf的用法,但是不太明显。它需要至少3个链接才能到达那个页面,而且它只是一个没有详细解释的一般陈述。在linux的手册页上有关于这个问题的详细解释。有兴趣的可以看看。

  补充,这是我前一阶段碰到的文章。我提取了它,忘记了来源.今天我整理了一下笔记,决定贴在博客上和大家分享。如果作者看到没有注明详细出处,忘了见谅!

scanf与gets连用,什么时候用gets什么时候用scanf