定义一个数组后,进行输出,但是无缘无故的多输出俩个1,想了很久没得到答案,帮助一下我吧
按照你的输入,在进入for循环之前
a[2] = 3, 并且打印了一个3,然后进入循环i = 1 到 i < 3
第一次外层循环 i = 1;
内层循环从j = 0 到j < 1
j = 0是,o = i (1), a[0] = a[2] - o = 2, 并打印出2
第二次循环 i = 2;
内层循环,从j = 0 到 j < 2
j = 0时,o = i = 2, a[0] = a[2] - o = 3 - 2 = 1, 打印出 1
j = 1 时, o = i = 2, a[1] = a[2] - o = 3 - 2 = 1 , 打印出 1
结束循环。
不知道你这个问题是否已经解决, 如果还没有解决的话:1、编写一个函数,它的目的是为了输出所有性别为男的的职工信息
算法分析:
1)这个函数它不用返回值因为该函数是为了完成输出
2)该函数要处理很多职工,就需要一个数组,数组的类型为职工类型
注意:在C语言当中字符串不能直接比较是否相同,要通过strcmp这个函数来比较其两个字符串是否相同
#include<stdio.h>
#include<string.h>
typedef struct worker{
char id[10];
char name[10];
char sex[10];
int pay;
}WOR;
void QueryWorker(WOR a[],int n){//次函数是用来输出长度为n的工人数组的信息
int i;
printf("全部员工:\n");
printf("工号\t姓名\t性别\t年龄\n");
for(i=0;i<6;i++){
printf("%s\t%s\t%s\t%d\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
}
printf("所有男员工:\n");
printf("工号\t姓名\t性别\t年龄\n");
for(i=0;i<6;i++){
if(strcmp(a[i].sex,"男")==0){
printf("%s\t%s\t%s\t%d\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
}
}
printf("所有女员工:\n");
printf("工号\t姓名\t性别\t年龄\n");
for(i=0;i<6;i++){
if(strcmp(a[i].sex,"女")==0){
printf("%s\t%s\t%s\t%d\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
}
}
}
void main(){
WOR a[6]={
{"0001","陈文杰","男",1200},
{"0002","张三丰","女",5000},
{"0003","张四丰","女",1200},
{"0004","张五丰","男",2200},
{"0005","张六丰","男",5200},
{"0006","张七丰","男",6200}
};
QueryWorker(a,6);
}
2、能够输出指定性别的职工
#include<stdio.h>
typedef struct worker{
char id[10];
char name[10];
char sex[10];
int pay;
}WOR;
void QueryBySex(WOR a[],int n,char b[]){//次函数是用来输出长度为n的工人数组的信息
int i;
printf("工号\t姓名\t性别\t年龄\n");
for(i=0;i<6;i++){
if(strcmp(a[i].sex,b)==0){
printf("%s\t%s\t%s\t%d\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
}
}
}
void main(){
WOR a[6]={
{"0001","陈文杰","男",1200},
{"0002","张三丰","女",5000},
{"0003","张四丰","女",1200},
{"0004","张五丰","男",2200},
{"0005","张六丰","男",5200},
{"0006","张七丰","男",6200}
};
char b[10];
printf("请输入您要查询的性别 :\n");
scanf("%s",b);
QueryBySex(a,6,b);
}
对于题目中出现的问题,可能是因为数组越界或者内存泄漏等原因导致多输出了两个1。可以通过以下方法来解决:
确认数组的大小是否正确,是否有越界现象,数组越界容易导致有未定义的值被输出。
确认代码中是否有内存泄漏的情况,可以使用Valgrind等工具检查程序中的内存问题,及时发现和解决内存泄漏问题。
可以使用指针来遍历数组,以此来避免使用数组下标可能导致的问题。
具体的代码实现如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[5] = {1, 2, 3, 4, 5};
int *p = arr; // 使用指针 p 指向数组 arr
// 使用指针遍历数组并输出
for(int i = 0; i < 5; i++)
{
printf("%d ", *p); // 输出指针所指向的值
p++; // 将指针 p 指向下一个元素
}
return 0;
}
通过使用指针遍历数组,可以避免使用数组下标可能导致的问题,避免出现多输出了两个1的问题。