零件号: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;
}
}
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;
}
}
#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因为有你这样的人而精彩。
根据你的提示“\n用于吃掉前面输入的回车符”,我发现只需把我原来代码的那2个 scanf("%c",&k); 语句改成scanf("\n%c",&k); 就行了!只需加一个\n用于吃掉前面输入的回车符。
对于你的代码,我也读懂了,写得比我写的清晰多了,看起来非常漂亮。
你是用VC++做IDE的吧?你的注释语句用的是//,这是VC++里的注释,TC的注释是/* */ 呵呵
再一次感谢你的出手相助,CSDN因为有你这样的人而精彩。
#6
发完上面一贴才发现 RainWindy(风雨交加) 的代码,我编译运行后也得到了很正确的结果。
你用了 flag 标志 和 k = getche() 来判断输入的选择,使我又增加了一种思路。非常感谢你。
能得到你们的帮助,我无比高兴也无比感激...除了说谢谢,我还能说什么呢...
你用了 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;
}
}
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;
}
}
#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因为有你这样的人而精彩。
根据你的提示“\n用于吃掉前面输入的回车符”,我发现只需把我原来代码的那2个 scanf("%c",&k); 语句改成scanf("\n%c",&k); 就行了!只需加一个\n用于吃掉前面输入的回车符。
对于你的代码,我也读懂了,写得比我写的清晰多了,看起来非常漂亮。
你是用VC++做IDE的吧?你的注释语句用的是//,这是VC++里的注释,TC的注释是/* */ 呵呵
再一次感谢你的出手相助,CSDN因为有你这样的人而精彩。
#6
发完上面一贴才发现 RainWindy(风雨交加) 的代码,我编译运行后也得到了很正确的结果。
你用了 flag 标志 和 k = getche() 来判断输入的选择,使我又增加了一种思路。非常感谢你。
能得到你们的帮助,我无比高兴也无比感激...除了说谢谢,我还能说什么呢...
你用了 flag 标志 和 k = getche() 来判断输入的选择,使我又增加了一种思路。非常感谢你。
能得到你们的帮助,我无比高兴也无比感激...除了说谢谢,我还能说什么呢...
#7
我太菜了,我的理解是break和continue的使用!