c - 为什么我的程序打印零而不是 -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;
}
解决方案
您声明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 子句中的相等性。
推荐阅读
- postgresql - 使用 ST_Distance_Sphere 和 ST_GeomFromText 获取距离
- odata - 在 SAP UI5 中为具有两个键的行(项目)预填充编辑页面
- image - 复制粘贴图形-功能-照片不复制
- command - 如何制作仅影响特定游戏模式中玩家的命令
- vb.net - 在选定的日历中创建约会 (VSTO vb.net)
- excel - VBA:按变量自适应选择行、列、范围
- javascript - 如何根据一个对象内的字段过滤对象数组?
- ruby-on-rails - 访问 Rails 策略对象中的参数
- azure - Azure ADF v2-如何向部署到 Azure Data Lake 的文件名添加/附加时间戳
- javascript - 等待 NodeJS exec 然后杀死所有子进程