C 如何防止程序在切换后停止?
你好。我的任务是创建一个“程序列表”,显示我创建的所有程序。首先,我会向用户输入密码,然后如果他们输入了错误的密码,程序将退出。这很好,但是当他们输入正确的密码时问题就来了。我使用开关盒解决这个问题,在前一个开关盒内有一个while循环和另一个开关盒。问题是,在输入正确的密码后,C打印出文本,但不让我输入任何内容,它只是结束程序。代码如下:C 如何防止程序在切换后停止?,c,C,你好。我的任务是创建一个“程序列表”,显示我创建的所有程序。首先,我会向用户输入密码,然后如果他们输入了错误的密码,程序将退出。这很好,但是当他们输入正确的密码时问题就来了。我使用开关盒解决这个问题,在前一个开关盒内有一个while循环和另一个开关盒。问题是,在输入正确的密码后,C打印出文本,但不让我输入任何内容,它只是结束程序。代码如下: #include <stdio.h> #include <string.h> int main() { char name
#include <stdio.h>
#include <string.h>
int main()
{
char name [64], program, prog1;
int password;
printf("Good day! What is your name? ");
scanf("%s", &name);
printf("Good day, %s! Please input the password for this program. ", name);
scanf("%i", &password);
switch(password) {
case 1234:
system("CLS");
printf("MENU OF PROGRAMS");
printf("\n(1) BMI Calculator ");
printf("\n(2) Program 2");
printf("\n(3) Program 3");
printf("Would you like to test my programs? Input Y or N: ");
scanf("%c", &prog1);
while (prog1=='Y') {
printf("\nInput desired program: ");
scanf("%i", &program);
system("CLS");
switch(program) {
case 1:
// Program 1
case 2:
// Program 2
case 3-10:
// Code
default:
system("color 2");
printf("Thank you for trying out my menu of programs! :)");
return 0;
}
}
break;
default:
printf("Incorrect Password.");
}
}
有什么解决办法吗?到目前为止,我们只允许使用代码中包含的函数。任何帮助都将不胜感激,非常感谢 变量
program
在scanf()中应为%c
,或者将变量program
的变量类型更改为int.在scanf()中应为%c
)
使用变量程序
或将变量程序
的变量类型更改为int。scanf()
通常以回车
结束。在输入正确密码后输入enter时,最后一个字符是“\n”。用于获取输入“Y”或“N”的下一个scanf()
将获取“\N”并终止。因此,在这种情况下,prog1
中没有保存任何值。当执行while(prog1=='Y')
时,条件失败,程序终止
为了避免这种情况,您可以在scanf()中的\c
之前使用单个空格<代码>scanf(“\c”和&prog1)scanf()通常以回车键终止。在输入正确密码后输入enter时,最后一个字符是“\n”。用于获取输入“Y”或“N”的下一个scanf()
将获取“\N”并终止。因此,在这种情况下,prog1
中没有保存任何值。当执行while(prog1=='Y')
时,条件失败,程序终止
为了避免这种情况,您可以在scanf()中的\c
之前使用单个空格<代码>scanf(“\c”和&prog1)代码>添加一个printf(“char='%c'\n”,prog1)代码>在scanf
之后,查看发生了什么。请尝试scanf(“%c”和&prog1)
跳过前一个输入中缓冲区中留下的空白。对于详细信息,在程序中使用该值之前,您必须检查用于确定输入是否成功的每个用户输入函数的返回。建议用户将fgets()
输入到一个足够大的数组中,然后使用sscanf()
解析任何值,这样输入流中剩余的值就不会取决于使用的转换说明符以及下一个是否忽略前导空格。scanf(“%s”),…
没有字段宽度修饰符并不比get()
更安全。请参阅scanf(“%s”,&name);
将乐于尝试在name
的地址存储无限数量的字符(这是错误的,请删除”&“
,name
已经是一个指针)当只有63
字符可用时。最好if(scanf(“%63s”,name)!=1){/*handle manual EOF*/}
。添加printf(“char='%c'\n”,prog1);
在scanf
之后添加查看发生了什么。尝试scanf(“%c”,&prog1);
跳过上一次输入中保留在缓冲区中的空白。有关详细信息,在程序中使用该值之前,您必须检查用于确定输入是否成功的每个用户输入函数的返回值。建议用户输入是使用fgets()
到足够大的数组中,然后使用sscanf()
解析任何值,以便输入流中剩余的内容不依赖于使用的转换说明符以及下一个是否忽略前导空格。scanf(“%s”,…
没有字段宽度修饰符并不比get()
更安全。请参阅scanf(“%s”,&name)当只有63
个字符可用时,
将很乐意尝试在name
的地址存储无限数量的字符(这是错误的,请删除&
,name
已经是一个指针)。如果(scanf(“%63s”,name)!=1{/*handle manual EOF*/}
。scanf(“%s”和&name)有什么问题;
?name
不是已经是指针了吗?scanf(“%s”和&name)有什么问题;
?name
不是已经是指针了吗??
MENU OF PROGRAMS
(1) BMI Calculator
(2) Program 2
(3) Program 3
Would you like to test my programs? Input Y or N:
--------------------------------
Process exited after 5.908 seconds with return value 10
Press any key to continue . . .