c语言 - 数组没有改变,第三个扫描不允许我输入任何内容



所以这个程序是用于事件预订的。我一直在处理这个程序的一些问题,我想不出更好的解决方案。程序不完整。我只为案例A编写了程序。我已经解释了下面的两个问题。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int i, j, day, x;
char session[10];
int array[2][5] = {{0,0,1,0,1},{1,1,0,0,0}};
char response,ans,choice;

printf("n**************** WELCOME TO NAT RESERVATION SYSTEM ****************");

printf("nnCHOOSE WHAT TO DO");
printf("nnttA.ttBOOK THE THEATERn");
printf("ttB.ttCHECK RESERRVATIONSn");
printf("ttC.ttREMOVE RESERVATIONSn");
printf("ttD.ttCALCULATE INCOMEn");
printf("ttE.ttEXITn");
printf("nnYOUR RESPONSEtt:  ");
scanf(" %c",&response);

switch (response){
case 'A': printf("nnBOOK THE THEATER"); break;
case 'B': printf("nnCHECK RESERRVATIONS"); break;
case 'C': printf("nnREMOVE RESERVATIONS"); break;
case 'D': printf("nnCALCULATE INCOME"); break;
case 'E': printf("nnEXIT"); break;
}

第一个问题:第三个scanf不允许我输入任何内容。即使我将其更改为scanf("%c",&ans(;同样的事情也会发生。我试图删除第二次扫描中的空格,但当我这样做时,它不会让我在其中输入任何内容,但可以在第三次扫描中输入(我希望你理解我的问题(

if (response == 'A'){
printf("nnCHOOSE A DAY     :   ");
scanf("%d",&day);
j = day -1;
printf("YOUR SESSION     :   ");
scanf(" %c",session);    //WHEN I REMOVE THE SAPCE IT DOESNT LET ME INPUT ANYTHING
if(session[0] == 'M'){
i = 0;
}
if(session[0] == 'A'){
i = 1;
}
if(array[i][j] == 0){
printf("nnTHE SESSION IS AVAILABLE.nDO YOU WANT TO CONFIRM THE BOOKING?(Y/N)   :   ");
scanf("%c",&ans);  //3RD SCANF IF I KEEP A SPACE IN THE SECOND SCANF, I CANT INPUT ANYTHING HERE

第二个问题:预订前数组[i][j]为0,因此在他们确认预订后数组[i][j]应为1。例如,如果我想预订第1天(j=0(的上午时段(I=0(。在我给出输入之后,它表明会话是可用的。然后我确认预订,数组[0][0]应该是1。但是如果我再次给出相同的输入,则表明会话是可用的。但我希望它显示会话不可用。

if(ans == 'Y' || ans == 'y'){
array[i][j] = 1;
printf("nYOUR BOOKING WAS SUCCESSFUL!nn");
main();

}
}
if(array[i][j] == 1){
printf("nnTHE SESSION IS NOT AVAILABLE.");
printf("nDO YOU WANT TO TRY ANOTHER SESSION?(Y/N):  ");
scanf(" %c",&ans);
if(ans == 'Y' || ans == 'y'){
main();

}else if(ans == 'N' || ans == 'n'){
printf("THANK YOU! HAVE A NICE DAY!");
exit(0);
}
}  
}
return 0;
}

任何帮助都将不胜感激。谢谢

查看您的代码:

scanf(" %c", session); // ... WHEN I REMOVE THE SAPCE ...

session的类型是char[](即字符数组(,但您在会话中只存储了一个%c(单个字符(。此外,您还没有给出任何指示内存位置的"与"符号。

因此,将其更改为类似以下内容:

#define MAX 10
char session[MAX];
scanf("%s", session);

另一种方法是使用注释中所示的fgets(),但您可能需要截断由它引起的换行符:

#define MAX 10
char session[MAX];
fgets(session, MAX, stdin); // it'll accepts whitespaces too!
session[strlen(session) - 1] = ''; // to avoid the extra newline

您现在可以保留空间(SESSION AVAILABLE案例(:

scanf(" %c", &ans);

作为底线,您应该始终验证输入是否被正确接受(即验证scanf返回的值是否与其中传递的参数完全相等(,以避免程序中产生奇怪的行为。

您可以在代码中尝试%s,也可以使用gets(会话(;

if (response == 'A'){
printf("nnCHOOSE A DAY     :   ");
scanf("%d",&day);
j = day -1;
printf("YOUR SESSION     :   "); 
//scanf(" %s",session);    //try this one 
//gets(session);          //or this one
}
if(session[0] == 'M'){
i = 0;
}
if(session[0] == 'A'){
i = 1;
}
if(array[i][j] == 0){
printf("nnTHE SESSION IS AVAILABLE.nDO YOU WANT TO CONFIRM THE BOOKING? 
(Y/N)   :   ");
scanf("%c",&ans);  //3RD SCANF IF I KEEP A SPACE IN THE SECOND SCANF, I CANT 
INPUT ANYTHING HERE

最新更新