mirror of
https://github.com/Aexiar/c.git
synced 2024-10-22 14:05:45 +02:00
2024年10月21日 17:19
This commit is contained in:
parent
0dfa9cedbb
commit
f169b0a245
@ -747,9 +747,19 @@ int main() {
|
||||
}
|
||||
```
|
||||
|
||||
## 3.5 缓冲区对 scanf 函数的影响
|
||||
## 3.5 scanf 函数的返回值
|
||||
|
||||
* scanf 函数是从标准输入缓冲区 `stdio` 从读取数据,而不是直接从键盘读取数据。
|
||||
* 对于 scanf 函数其实是有返回值的,如下所示:
|
||||
|
||||
```c
|
||||
extern int scanf (const char *__restrict __format, ...)
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> * ① 只要成功匹配并读取了一个数据输入项,那么函数的返回值就会是一个`正数`。注意,函数返回正数不意味着所有输入都能匹配成功,只要匹配成功一个输入项,返回值就是一个正数。
|
||||
> * ② 如果返回值是`0`,那说明 scanf 没有成功匹配任何数据输入项,这通常是因为数据输入项`完全不匹配`。
|
||||
> * ③ 如果函数返回值是`负数`,说明 scanf 读到了 EOF(流末尾)或者发生了错误。在 Windows 系统终端里,键入"Ctrl + Z" 表示输入 EOF,在类Unix平台中,这个按键则是"Ctrl + D",可以了解一下。
|
||||
|
||||
|
||||
|
||||
@ -763,12 +773,16 @@ int main() {
|
||||
// 禁用 stdout 缓冲区
|
||||
setbuf(stdout, nullptr);
|
||||
|
||||
int num;
|
||||
int num1, num2;
|
||||
char ch;
|
||||
scanf("%d", &num);
|
||||
scanf(" %c", &ch);
|
||||
printf("你输入的数字是: %d\n", num);
|
||||
printf("你输入的字符是: %c\n", ch);
|
||||
int ret = scanf("%d %d %c", &num1, &num2, &ch);
|
||||
|
||||
/*
|
||||
若键入的数据是 100 200 A,则正常匹配录入 3 个数据,ret 等于 3
|
||||
若键入的数据是 100 A 200,则正常匹配录入 1 个数据,ret 等于 1
|
||||
若键入的数据是 A 100 200,则正常匹配录入 0 个数据,ret 等于 0
|
||||
*/
|
||||
printf("ret = %d\n", ret);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -776,4 +790,11 @@ int main() {
|
||||
|
||||
|
||||
|
||||
* 对于上述的案例,如果输入 `100 A`,则结果是 100 和 A。但是,如果输入 `100A` ,结果还是 100 和 A。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user