Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何防止程序在切换后停止?_C - Fatal编程技术网

C 如何防止程序在切换后停止?

C 如何防止程序在切换后停止?,c,C,你好。我的任务是创建一个“程序列表”,显示我创建的所有程序。首先,我会向用户输入密码,然后如果他们输入了错误的密码,程序将退出。这很好,但是当他们输入正确的密码时问题就来了。我使用开关盒解决这个问题,在前一个开关盒内有一个while循环和另一个开关盒。问题是,在输入正确的密码后,C打印出文本,但不让我输入任何内容,它只是结束程序。代码如下: #include <stdio.h> #include <string.h> int main() { char name

你好。我的任务是创建一个“程序列表”,显示我创建的所有程序。首先,我会向用户输入密码,然后如果他们输入了错误的密码,程序将退出。这很好,但是当他们输入正确的密码时问题就来了。我使用开关盒解决这个问题,在前一个开关盒内有一个while循环和另一个开关盒。问题是,在输入正确的密码后,C打印出文本,但不让我输入任何内容,它只是结束程序。代码如下:

#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 . . .