scanf("%c",&a[i]);scanf("%c",a[i]);哪个是对的?
时间: 2024-01-08 19:20:20 浏览: 101
引用[1]中的两个代码片段`while(scanf("%d%d", &i, &j) == 2)`和`while(~scanf("%d%d",&a,&b))`的差别在于条件判断部分。第一个代码片段使用了`scanf`函数的返回值来判断输入是否成功,如果成功则返回2,否则返回其他值。而第二个代码片段使用了位运算符`~`对`scanf`函数的返回值取反,如果输入成功则返回-1,否则返回其他值。
引用中的代码`scanf("%c", &a)`并没有执行输入操作,而是直接跳过了。这是因为在前面的输入操作中,可能留下了一个换行符(`\n`)在输入缓冲区中。当执行`scanf("%c", &a)`时,它会读取输入缓冲区中的下一个字符,而不会等待用户输入。因此,它会读取到之前留下的换行符,而不是用户想要输入的字符。
对于`scanf("%c",&a[i]);scanf("%c",a[i]);`这两个代码片段,正确的写法是`scanf("%c",&a[i]);`。在`scanf`函数中,`%c`用于读取一个字符,并将其存储到变量`a[i]`中。因此,第一个`scanf`语句是正确的,可以读取一个字符并存储到`a[i]`中。而第二个`scanf`语句中的参数`a[i]`缺少了取地址符`&`,因此是错误的写法。
相关问题
c语言代码#include<stdio.h> struct student { int num; char name[20]; char gender; int age; }; struct student a[50]; int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i].num); scanf("%s",&a[i].name); scanf("%c",&a[i].gender); scanf("%d",&a[i].age); } for(int i=0;i<n;i++) { if(a[i].age>=20) { printf("%d %s\n",a[i].num,a[i].name); } } return 0; }解释
这是一段使用C语言编写的代码,实现了一个学生信息管理系统,可以输入多个学生的信息,包括学号、姓名、性别和年龄,并且可以输出年龄大于等于20岁的学生的学号和姓名。
代码开始定义了一个结构体`struct student`,包括四个成员:学号(num)、姓名(name)、性别(gender)和年龄(age)。然后定义了一个结构体数组`a`,长度为50,用于存储多个学生的信息。
`main()`函数中,首先通过`scanf("%d",&n)`获取需要录入的学生数量。然后使用`for`循环,遍历每个学生,分别通过`scanf()`函数获取学号、姓名、性别和年龄,并存储到结构体数组`a`中。
接下来再使用一个`for`循环,遍历所有学生,判断年龄是否大于等于20岁,如果是,则使用`printf()`函数输出该学生的学号和姓名。
最后返回0,表示程序正常结束。
c语言代码#include<stdio.h> struct student { int num; char name[20]; char gender; int age; }; struct student a[50]; int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i].num); scanf("%s",&a[i].name); scanf("%c",&a[i].gender); scanf("%d",&a[i].age); } for(int i=0;i<n;i++) { if(a[i].age>=20) { printf("%d %s\n",a[i].num,a[i].name); } } return 0; }解释
这是一个 C 语言程序,用于读入一些学生信息并输出年龄大于等于20岁的学生的学号和姓名。
首先,定义了一个结构体 `student`,其中包含学号、姓名、性别和年龄四个成员变量。
然后,在 `main` 函数中,先读入学生的数量 `n`,然后循环读入每个学生的信息,包括学号、姓名、性别和年龄,存储到结构体数组 `a` 中。
接下来,在循环中判断每个学生的年龄是否大于等于20岁,如果是,则输出学号和姓名。
最后,返回0,表示程序正常结束。
阅读全文