C语言一个查询信息的小程序,稍微出了点错,能帮我看看吗?

时间:2023-02-21 10:17:27
题目:仓库中有多种型号的零件,编写一查询程序用于查询每种零件的库存量。
      零件号:150001  150002  150003  150004 150005
      库存量:1000    500     230     700    998

题目要求是:
1,当程序运行时,首先在屏幕上显示“请输入要查询的零件编号:”,例如,操作者输入了150003后,则在屏幕上立即显示出该零件的编号及它的库存量,如:150003 230

2,如果操作者输入的零件编号超出了该库中所规定的范围,则应在屏幕上显示出“您输入的是错误的零件编号,请选择:重新输入(Y),退出查询(N)”。

3,当操作者正确的查询到自己所要查询的库存数据后,则在屏幕上应显示出“您还要继续查询吗(Y/N)?”,如果继续查,则可输入Y,否则输入N,即结束此次查询。

我编写的代码如下:
main()
{
 long n;
 long a[2][5]={{150001,150002,150003,150004,150005},{1000,500,230,700,998}};
 int i,j;
 char k;
 for(j=0;j<3;j++)
 {
  printf("Please input the number of the accessory which you want:");
  scanf("%ld",&n);
  for(i=0;i<6;i++)
  {
   if(i==5)
   {
    printf("You have inputed the wrong number.Please choose:retry(Y),exit(N)");
    scanf("%c",&k);
   }
   if(n!=a[0][i])continue;
   printf("%ld %ld\n",a[0][i],a[1][i]);
   printf("Would you like to continue to check,Y or N?");
   scanf("%c",&k);break;
  }
  j--;
  if(k=='Y')continue;
  if(k=='N')break;
 }
}

出现的问题是:
当输入一个正确的零件编号后,程序正确的显示了该零件的库存量,然后出现了“Would you like to continue to check,Y or N?”,随即又马上出现了“Please input the number of the accessory which you want:”
即:我还没有选择是Y还是N的时候,它就自动又让我重新输入下一个编号了,即自动让我“继续查询”了。

请问怎样才能控制它,让它等我输入完Y或N后再执行是否要继续查询或退出查询呢?

谢谢了。

7 个解决方案

#1


yong map 

#2


#include <stdio.h>

void main()
{
long n;
long a[2][5]={{150001,150002,150003,150004,150005},{1000,500,230,700,998}};
char k;
int i;

while(1)
{
printf("Please input the number of the accessory which you want:");
scanf("%ld",&n);
for(i=0;i<6;i++)
{
if(n==a[0][i]){
break;
}
}

if(i == 6){
printf("Error number, Retry? Y or N ?");
scanf("\n%c",&k); //\n用于吃掉前面输入的回车符
if ( k == 'y' || k == 'Y'){
continue;
}
break;
}

printf("%ld %ld\n",a[0][i],a[1][i]);
printf("Would you like to continue to check,Y or N?");
scanf("\n%c",&k);
if( k == 'y' || k == 'Y'){
 continue;
}
break;
}
}

#3


#include <stdio.h>
#include <conio.h>
main()
{
long n;
long a[2][5]={{150001,150002,150003,150004,150005},{1000,500,230,700,998}};
int i,j;
char k;
int flag = 0;

for(j=0;j<3;j++)
{
printf("\nPlease input the number of the accessory which you want:");
scanf("%ld",&n);

for(i=0;i<5;i++)
{
if (n == a[0][i])
break;
}

if (i < 5) // 找到了
{
printf("%ld %ld\n",a[0][i],a[1][i]);
printf("\nWould you like to continue to check,Y or N?");
}
else
printf("\nYou have inputed the wrong number.Please choose:retry(Y),exit(N)");

k = 0;

flag = -1;
while(flag == -1)
{
k = getche();

switch (k)
{
case 'Y':
case 'y':
flag = 1;
break;
case 'N':
case 'n':
flag = 0;
break;
}
}

if (!flag)
break;
}
}

#4


上面这位兄弟程序写的真好,顶!

#5


非常感谢 qfeng_zhao(天天向上) 的帮助,使我解决了这个困扰我昨晚一晚上的问题!

根据你的提示“\n用于吃掉前面输入的回车符”,我发现只需把我原来代码的那2个 scanf("%c",&k); 语句改成scanf("\n%c",&k); 就行了!只需加一个\n用于吃掉前面输入的回车符。

对于你的代码,我也读懂了,写得比我写的清晰多了,看起来非常漂亮。

你是用VC++做IDE的吧?你的注释语句用的是//,这是VC++里的注释,TC的注释是/*  */ 呵呵

再一次感谢你的出手相助,CSDN因为有你这样的人而精彩。

#6


发完上面一贴才发现 RainWindy(风雨交加) 的代码,我编译运行后也得到了很正确的结果。

你用了 flag 标志 和 k = getche() 来判断输入的选择,使我又增加了一种思路。非常感谢你。

能得到你们的帮助,我无比高兴也无比感激...除了说谢谢,我还能说什么呢...

#7


我太菜了,我的理解是break和continue的使用!

#1


yong map 

#2


#include <stdio.h>

void main()
{
long n;
long a[2][5]={{150001,150002,150003,150004,150005},{1000,500,230,700,998}};
char k;
int i;

while(1)
{
printf("Please input the number of the accessory which you want:");
scanf("%ld",&n);
for(i=0;i<6;i++)
{
if(n==a[0][i]){
break;
}
}

if(i == 6){
printf("Error number, Retry? Y or N ?");
scanf("\n%c",&k); //\n用于吃掉前面输入的回车符
if ( k == 'y' || k == 'Y'){
continue;
}
break;
}

printf("%ld %ld\n",a[0][i],a[1][i]);
printf("Would you like to continue to check,Y or N?");
scanf("\n%c",&k);
if( k == 'y' || k == 'Y'){
 continue;
}
break;
}
}

#3


#include <stdio.h>
#include <conio.h>
main()
{
long n;
long a[2][5]={{150001,150002,150003,150004,150005},{1000,500,230,700,998}};
int i,j;
char k;
int flag = 0;

for(j=0;j<3;j++)
{
printf("\nPlease input the number of the accessory which you want:");
scanf("%ld",&n);

for(i=0;i<5;i++)
{
if (n == a[0][i])
break;
}

if (i < 5) // 找到了
{
printf("%ld %ld\n",a[0][i],a[1][i]);
printf("\nWould you like to continue to check,Y or N?");
}
else
printf("\nYou have inputed the wrong number.Please choose:retry(Y),exit(N)");

k = 0;

flag = -1;
while(flag == -1)
{
k = getche();

switch (k)
{
case 'Y':
case 'y':
flag = 1;
break;
case 'N':
case 'n':
flag = 0;
break;
}
}

if (!flag)
break;
}
}

#4


上面这位兄弟程序写的真好,顶!

#5


非常感谢 qfeng_zhao(天天向上) 的帮助,使我解决了这个困扰我昨晚一晚上的问题!

根据你的提示“\n用于吃掉前面输入的回车符”,我发现只需把我原来代码的那2个 scanf("%c",&k); 语句改成scanf("\n%c",&k); 就行了!只需加一个\n用于吃掉前面输入的回车符。

对于你的代码,我也读懂了,写得比我写的清晰多了,看起来非常漂亮。

你是用VC++做IDE的吧?你的注释语句用的是//,这是VC++里的注释,TC的注释是/*  */ 呵呵

再一次感谢你的出手相助,CSDN因为有你这样的人而精彩。

#6


发完上面一贴才发现 RainWindy(风雨交加) 的代码,我编译运行后也得到了很正确的结果。

你用了 flag 标志 和 k = getche() 来判断输入的选择,使我又增加了一种思路。非常感谢你。

能得到你们的帮助,我无比高兴也无比感激...除了说谢谢,我还能说什么呢...

#7


我太菜了,我的理解是break和continue的使用!