C语言与常用函数

1. scanf的疑难

  scanf一般用于读取终端输入,一般的用法可以参考 菜鸟博客。常用的分隔符为:空格、tab、换行(回车)。

注意:终端输入的所有字符会放到 缓冲区 内,scanf从缓冲区读取和设定格式的字符,多余的字符(包括分隔符)都将留在缓冲区,等待下一次读取。

* 在终端的一次非输入性回车则代表一次输入的完成。

scanf("%d", &num);    // 若输入:6\n,则读取完后缓冲区还剩下 \n
scanf("%d\n", &num);  // 若输入:6\n,则会继续阻塞,这里的 \n 在设定的格式内是需要的,应该再输入一个回车,这个回车会作为输入完成的标识动作,即:6\n\n,剩:\n

 

  在读取缓冲区内容时,开始的分隔符都将跳过,直到读到第一个非空白符,将其和设定格式进行匹配。%c是例外,见下面的例子。

  scanf中的占位符 %c 和 %s 间的区别如下:

1)%s:读入字符串,直到读取到分割符为止;使用此占位符时,空格、tab、换行 都会被视为 分割符,是多个输入间的分割。分隔符存在于缓冲区,但是不作为 %s 的读入,作为无效输入。

string s1, s2;
scanf("%s%s", &s1, &s2);

  用换行或空格等作为分割是等效的,如下,s1、s2将分别被赋以 "xxx"、"yyy"。

// input 1: 
xxx yyy
// input 2: 
xxx
yyy

2)%c:读入一个字符;对于此占位符,空格、tab、换行 都会被视为有效字符,可以用 getchar() 拿走缓冲区的3类占位符。

// input:123 55(enter)
char* s;
s = (char*)malloc(10);    // assign enough space
scanf("%s", s);        // s: "123"
scanf("%c", s);        // s: " 23", replace the first character with ' '

 

posted @ 2022-08-06 23:57  谷小雨  阅读(95)  评论(0编辑  收藏  举报