首页 > 解决方案 > 为什么我的程序打印零而不是 -1

问题描述

我应该制作一个搜索程序,我必须输入 n 个客户的数据,其中每个数据包含每个客户的 ID、姓名、年龄和余额。

然后要求用户输入 m 个查询。对于每个查询,给定一个变量 x 以在第一个数组中搜索 ID 为 x 的客户是否存在。如果存在,程序输出客户的数据,如果不存在,程序输出“-1”。

在这里,对于存在 ID 的每个查询,我已经成功地打印了客户的数据,首先将它们存储到新数组中,但是对于不存在的 x 的查询,我的代码打印零而不是 -1。

我想问题出在我的代码的最后一个和倒数第二个循环附近,或者我初始化计数变量错误但我仍然无法弄清楚我应该修复什么。

这是一个示例输入

    5
    ANGE,Andrew Garfield,18,110933.25
    HAIS,Spectra Vgeist,18,25000.00
    NERA,Frankie,16,999999999.99
    TION,Dorothy White,22,0.00
    VVVV,Michael J,17,100000.00
    3
    NERA
    JOLY
    VVVV

输出应该是什么样子

        Frankie 16 999999999.99
        -1
        Michael J 17 100000.00

但相反,这是我的程序打印出来的

        Frankie 16 999999999.99
         0 0.00
        Michael J 17 100000.00
#include <stdio.h>
#include <string.h>

struct Customer{
    char ID[100];
    char name[100];
    int age;
    double balance;
}N[1000];

int main(){
    int n,i,x,j,b[100],count[100];
    char m[100][100];
    char a[100][100];
    double c[100];
    
    scanf("%d",&n);
    getchar();
    
    for(i=0; i<n; i++){
        scanf(" %[^,],%[^,],%d,%lf",N[i].ID,N[i].name,&N[i].age,&N[i].balance);
        getchar();
    }
    scanf("%d",&x);
    for(i=0; i<x; i++){
        scanf("%s",m[i]);
        getchar();
        
    }
    for(i=0; i<n; i++){
        for(j=0; j<x; j++){
            if(strcmp(m[j],N[i].ID) == 0){
                strcpy(a[j],N[i].name);
                b[j] = N[i].age;
                c[j] = N[i].balance;
                count[j] = 0;
            }   
        }
    }
    for(i=0; i<x; i++){
        if(count[i] == 0){
            printf("%s %d %.2lf\n",a[i],b[i],c[i]);
        }
        else{
            printf("-1\n");
        }
    }
    
    return 0;
}

标签: c

解决方案


您声明count,但是您没有初始化它的值。它很可能会抓取一个填充为零的内存块,这意味着您的比较count[i] == 0将始终为真,因此不是 print -1。要解决此问题,我建议count使用 value初始化数组1。通过这样做,上面的等式只有在count[j]显式设置为时才会成立0。要初始化数组,请在声明数组后立即执行以下操作:

for(i = 0; i < 100; i++) {
   count[i] = 1
}

就个人而言,我会在必要时将count数组初始化为零并属性 1 count[j],因为我认为当有一个名为count. 无论哪种方式,但解决方案有效,如果您决定更改它,请考虑您还必须更改 if 子句中的相等性。


推荐阅读