单选题
1、第197题 (1.0分) 题号:554 从键盘上输入某字符串时,不可使用的函数是()。
A
getchar()
B
gets()
C
scanf()
D
fread()
答案解析
正确答案:A
解析:
这道题的正确答案实际上应该是 **D**,而不是题目中给出的 A。题目本身或者提供的答案可能存在错误。下面是对各个选项的详细解析,帮助你理解为什么 `fread()` 是不可用于从键盘直接输入字符串的标准函数,而 `getchar()` 是可以的(尽管它一次只读一个字符)。
### 详细解析
题目问的是:**从键盘上输入某字符串时,不可使用的函数是?**
我们需要分析每个函数在 C 语言中的用途和特性:
#### A. `getchar()`
* **功能**:从标准输入(通常是键盘)读取**单个字符**。
* **是否可用于输入字符串**:**可以**。虽然它一次只读一个字符,但可以通过循环调用 `getchar()` 将字符逐个存入字符数组中,从而构成字符串。
* 例如:
```c
char str[100];
int i = 0;
char c;
while ((c = getchar()) != '\n' && i < 99) {
str[i++] = c;
}
str[i] = '\0';
```
* **结论**:它是可以从键盘获取输入并组成字符串的,只是效率较低且需要手动处理。因此,说它“不可使用”是不准确的。
#### B. `gets()`
* **功能**:从标准输入(键盘)读取一行字符串,直到遇到换行符或 EOF。
* **是否可用于输入字符串**:**可以**。这是专门用来读取字符串的函数(尽管因为缓冲区溢出风险,在现代 C 标准中已被废弃,推荐用 `fgets`,但在传统 C 语言考试中仍常作为正确选项出现)。
* **结论**:可以直接用于从键盘输入字符串。
#### C. `scanf()`
* **功能**:格式化输入函数。
* **是否可用于输入字符串**:**可以**。使用 `%s` 格式说明符可以从键盘读取一个不含空格的字符串。
* 例如:`scanf("%s", str);`
* **结论**:可以直接用于从键盘输入字符串。
#### D. `fread()`
* **功能**:从**文件流**中读取数据块。它的原型是 `size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);`。
* **是否可用于输入字符串**:**理论上可以,但通常不用于“从键盘输入字符串”这种场景**。
* `fread` 是二进制读取函数,主要用于读取固定大小的数据块,常用于文件操作。
* 虽然可以将 `stdin` 作为流传入(`fread(buffer, 1, n, stdin)`),但它不是为交互式键盘输入设计的。它不会自动处理字符串结束符 `\0`,也不会像 `gets` 或 `scanf` 那样以换行符或空格为自然分隔。
* 在 C 语言的基础教学和考试语境中,`fread` 被归类为**文件操作函数**,而不是标准的**控制台/键盘字符串输入函数**。
* **结论**:在常规的“从键盘输入字符串”的语境下,`fread` 是不合适且不常用的,通常被视为“不可使用”或“非标准用法”。
---
### 为什么题目答案可能是错的?
* 如果答案是 **A**,那意味着出题人认为 `getchar()` 不能用来输入字符串。这显然是错误的,因为任何字符串输入底层都可以由字符输入组合而成。
* 如果答案是 **D**,这更符合 C 语言的教学逻辑:`getchar`、`gets`、`scanf` 都是 `` 中用于标准输入的经典函数,而 `fread` 是面向二进制流/文件的函数。
### 正确答案建议
**正确答案应为:D. fread()**
### 总结
| 函数 | 主要用途 | 能否用于键盘输入字符串 | 备注 |
|------|----------|------------------------|------|
| `getchar()` | 读取单个字符 | ✅ 能(需循环) | 基础字符输入 |
| `gets()` | 读取一行字符串 | ✅ 能 | 已废弃,但有此功能 |
| `scanf()` | 格式化输入 | ✅ 能(用 `%s`) | 常用字符串输入 |
| `fread()` | 二进制块读取 | ❌ 不适合 | 主要用于文件,非交互式字符串输入 |
> **注意**:如果你是在做题库练习,且系统强制认定答案为 A,那可能是题库有误。但从技术角度讲,**D 是更合理的“不可使用”选项**。
题目纠错
c语言选择判断题库
相关题目
单选题
1、第62题 (1.0分) 题号:570 以下叙述不正确的是()。
单选题
1、第61题 (1.0分) 题号:212 C语言中的文件类型只有()。
单选题
1、第60题 (1.0分) 题号:674 以下错误的描述是:函数调用可以()。
单选题
1、第59题 (1.0分) 题号:210 在位运算中,操作数每右移一位,其结果相当于()。
单选题
1、第58题 (1.0分) 题号:178 以下对C语言函数的描述中,正确的是()。
单选题
1、第57题 (1.0分) 题号:558 int a[10]={1,2,3,4,5,6,7,8};int *p;p=&a[5];p[-3]的值是()。
单选题
1、第56题 (1.0分) 题号:157 下列程序的输出结果是()。
单选题
1、第55题 (1.0分) 题号:565 以下叙述中正确的是()。
单选题
1、第54题 (1.0分) 题号:740 若要打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作, 下面符合此要求的函数调用是()。
单选题
1、第53题 (1.0分) 题号:92 以下的选择中,正确的赋值语句是()。
