数组没有改变,第三个 scanf 不让我输入任何东西
The array doesn't change and third scanf doesn't let me input anything
所以这个节目是为活动预订的。我一直在处理这个程序的一些问题,我想不出更好的解决方案。该程序未完成。我只写了case A的程序,下面2个问题我都解释过了
#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("\n\nCHOOSE WHAT TO DO");
printf("\n\n\t\tA.\t\tBOOK THE THEATER\n");
printf("\t\tB.\t\tCHECK RESERRVATIONS\n");
printf("\t\tC.\t\tREMOVE RESERVATIONS\n");
printf("\t\tD.\t\tCALCULATE INCOME\n");
printf("\t\tE.\t\tEXIT\n");
printf("\n\nYOUR RESPONSE\t\t: ");
scanf(" %c",&response);
switch (response){
case 'A': printf("\n\nBOOK THE THEATER"); break;
case 'B': printf("\n\nCHECK RESERRVATIONS"); break;
case 'C': printf("\n\nREMOVE RESERVATIONS"); break;
case 'D': printf("\n\nCALCULATE INCOME"); break;
case 'E': printf("\n\nEXIT"); break;
}
第一个问题:
第三个 scanf 不让我输入任何东西。即使我将其更改为 scanf (" %c",&ans);同样的事情发生了。我试图在第二次 scanf 中删除 space,但是当我这样做时,它不会让我在其中输入任何内容,但可以在第三次 scanf 中输入(我希望你理解我的问题)
if (response == 'A'){
printf("\n\nCHOOSE 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("\n\nTHE 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
第二个问题:array[i][j]在预订前是0,所以在他们确认预订后array[i][j]应该是1。举个例子,如果我想预订早上session (i=0) 第 1 天 (j=0)。在我提供输入后,它显示 session 可用。然后我确认预订数组 [0][0] 应该是 1。但是如果我提供相同的输入,它再次显示 session 可用。但我希望它显示 session 不可用。
if(ans == 'Y' || ans == 'y'){
array[i][j] = 1;
printf("\nYOUR BOOKING WAS SUCCESSFUL!\n\n");
main();
}
}
if(array[i][j] == 1){
printf("\n\nTHE 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;
}
感谢任何帮助。谢谢
您可以在代码中尝试使用 %s,而不是使用 %c,或者您可以使用 gets(session);
if (response == 'A'){
printf("\n\nCHOOSE 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("\n\nTHE 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
看看你的代码:
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] = '[=12=]'; // to avoid the extra newline
您现在可以保留 space(SESSION AVAILABLE
案例):
scanf(" %c", &ans);
作为底线,您应该始终验证输入是否被正确接受(即验证 scanf
返回的值是否完全等于其中传递的参数)以避免奇怪程序中生成的行为。
所以这个节目是为活动预订的。我一直在处理这个程序的一些问题,我想不出更好的解决方案。该程序未完成。我只写了case A的程序,下面2个问题我都解释过了
#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("\n\nCHOOSE WHAT TO DO");
printf("\n\n\t\tA.\t\tBOOK THE THEATER\n");
printf("\t\tB.\t\tCHECK RESERRVATIONS\n");
printf("\t\tC.\t\tREMOVE RESERVATIONS\n");
printf("\t\tD.\t\tCALCULATE INCOME\n");
printf("\t\tE.\t\tEXIT\n");
printf("\n\nYOUR RESPONSE\t\t: ");
scanf(" %c",&response);
switch (response){
case 'A': printf("\n\nBOOK THE THEATER"); break;
case 'B': printf("\n\nCHECK RESERRVATIONS"); break;
case 'C': printf("\n\nREMOVE RESERVATIONS"); break;
case 'D': printf("\n\nCALCULATE INCOME"); break;
case 'E': printf("\n\nEXIT"); break;
}
第一个问题: 第三个 scanf 不让我输入任何东西。即使我将其更改为 scanf (" %c",&ans);同样的事情发生了。我试图在第二次 scanf 中删除 space,但是当我这样做时,它不会让我在其中输入任何内容,但可以在第三次 scanf 中输入(我希望你理解我的问题)
if (response == 'A'){
printf("\n\nCHOOSE 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("\n\nTHE 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
第二个问题:array[i][j]在预订前是0,所以在他们确认预订后array[i][j]应该是1。举个例子,如果我想预订早上session (i=0) 第 1 天 (j=0)。在我提供输入后,它显示 session 可用。然后我确认预订数组 [0][0] 应该是 1。但是如果我提供相同的输入,它再次显示 session 可用。但我希望它显示 session 不可用。
if(ans == 'Y' || ans == 'y'){
array[i][j] = 1;
printf("\nYOUR BOOKING WAS SUCCESSFUL!\n\n");
main();
}
}
if(array[i][j] == 1){
printf("\n\nTHE 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;
}
感谢任何帮助。谢谢
您可以在代码中尝试使用 %s,而不是使用 %c,或者您可以使用 gets(session);
if (response == 'A'){
printf("\n\nCHOOSE 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("\n\nTHE 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
看看你的代码:
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] = '[=12=]'; // to avoid the extra newline
您现在可以保留 space(SESSION AVAILABLE
案例):
scanf(" %c", &ans);
作为底线,您应该始终验证输入是否被正确接受(即验证 scanf
返回的值是否完全等于其中传递的参数)以避免奇怪程序中生成的行为。