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 缓冲区
|
// 禁用 stdout 缓冲区
|
||||||
setbuf(stdout, nullptr);
|
setbuf(stdout, nullptr);
|
||||||
|
|
||||||
int num;
|
int num1, num2;
|
||||||
char ch;
|
char ch;
|
||||||
scanf("%d", &num);
|
int ret = scanf("%d %d %c", &num1, &num2, &ch);
|
||||||
scanf(" %c", &ch);
|
|
||||||
printf("你输入的数字是: %d\n", num);
|
/*
|
||||||
printf("你输入的字符是: %c\n", 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;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -776,4 +790,11 @@ int main() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
* 对于上述的案例,如果输入 `100 A`,则结果是 100 和 A。但是,如果输入 `100A` ,结果还是 100 和 A。
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user