字符数组a,b,正确地输入语句为什么是scanf("%s,%s",a,b);为什么不是scanf("%s%s",&a,&b);
时间: 2023-11-27 18:46:35 浏览: 164
scanf()函数是C语言中的一个输入函数,用于从标准输入设备(通常是键盘)读取数据。在读取字符串时,scanf()函数的格式控制字符串中使用%s格式说明符。对于两个字符串a和b,正确的输入语句应该是scanf("%s,%s",a,b);而不是scanf("%s%s",&a,&b);原因如下:
1. 在格式控制字符串中,%s格式说明符已经表示了要读取的是字符串类型,不需要再使用&符号获取其地址。
2. 在输入语句中,两个字符串之间使用逗号分隔,而不是空格。如果使用空格分隔,scanf()函数会将空格视为字符串的一部分,导致读取错误。
3. 字符数组名本身就是数组首元素的地址,不需要再使用&符号获取其地址。
下面是一个示例代码,演示了如何正确地使用scanf()函数读取两个字符串:
```c
#include <stdio.h>
int main()
{
char a[20], b[20];
printf("请输入两个字符串,用逗号分隔:");
scanf("%s,%s", a, b);
printf("您输入的两个字符串分别是:%s 和 %s\n", a, b);
return 0;
}
```
相关问题
有两个字符数组a,b,则以下正确的输入语句是() A. gets(a,b); B. scanf("%s%s",a,b); C. scanf("%s%s",&a,&b); D. gets("a"),gets("b");
正确的输入语句是B. scanf("%s%s",a,b);。在C语言中,使用scanf函数可以输入字符数组,%s表示输入字符串,而a和b分别表示两个字符数组的地址,因此可以使用scanf("%s%s",a,b)来输入两个字符数组a和b。而gets函数只能输入一个字符数组,因此选项A和D都是错误的。选项C中使用了&a和&b,这是错误的,因为&a和&b分别表示a和b数组的地址,而不是数组本身。
有两个字符数组a,b,则以下正确的输入语句是() A. gets(a,b); B. scanf("%s%s",a,b); C. scanf("%s%s",&a,&b); D. gets("a"),gets("b");
正确答案是 B. scanf("%s%s",a,b);。
- `gets` 函数在 C 语言中已经被标记为不安全,因为它可能会导致缓冲区溢出,尤其是在没有指定字符串长度的情况下。因此选项 A 和 D 都不推荐使用。
- `scanf` 函数用于从标准输入读取格式化的数据,`%s` 用于读取字符串,当用两个 `%s` 分别对应两个字符数组 a 和 b 时,应该分别跟在数组名后,选项 C 中的地址符 `&` 是多余的,因为数组名本身就是一个指向数组首元素的指针。
所以,选项 B 是正确的输入语句,它能正确地读取两个字符串并分别存储在 a 和 b 数组中。
阅读全文