C编程是,没有带错误捕捉器的循环

时间:2018-08-25 23:05:32

标签: c loops

我正在尝试使这个没有程序循环运行。我检查了其他用户的消息,只有一条写得不好并且不能正常工作。

因此,如果用户键入y或Y,则将进行安装;如果用户键入n或N,则退出程序。另外,如果他们输入w,m或其他不是y或n的字母,它会回到开头并再次询问他们。

不确定是while循环还是do while循环。我已经尝试了几个小时,但仍然无法正常工作。下面的程序可以运行,但是没有任何循环。

任何帮助将不胜感激。

#include <stdio.h>

int main() {

    char yn;

    printf("Do you want to install this programme? y/n: ");
    scanf("%c", &yn);

    if(yn == 'y' ||  yn == 'Y') {
        printf("Installing...\n");
    }
    else if(yn == 'n' || yn == 'N') {
        printf("Exiting programme!\n");
    }
    else {
        // Go back to the start/top of the programme!
    }
    return 0;
}

解决了!

这是有效的代码。感谢@govindparmar。

#include <stdio.h>

int main() {

    char yn;

    do {
    printf("Do you want to install this programme? y/n: ");
    scanf(" %c", &yn);
    }
    while(yn != 'n' && yn != 'N' && yn != 'y' && yn != 'Y');

    if(yn == 'n' ||  yn == 'N') {
    printf("Exiting programe!\n");
    }
    else {
    printf("Installing...\n");
    }

    printf("It works!\n");

    return 0;
}

4 个答案:

答案 0 :(得分:2)

您可以将代码包装到while循环中。

类似的东西:

while(1)
{
    printf("Do you want to install this programme? y/n: ");
    scanf("%c", &yn);

    if(yn == 'y' ||  yn == 'Y') {
        printf("Installing...\n");
        break;  // Stop the while-loop to end the program
    }
    else if(yn == 'n' || yn == 'N') {
        printf("Exiting programme!\n");
        break;  // Stop the while-loop to end the program
    }
}

答案 1 :(得分:1)

在这种情况下,最有意义的循环类型是do / while循环,因为从用户那里获得响应至少应该发生一次并进行测试,直到达到期望为止从用户获得响应。

此外,在检查相等性时在tolower上使用toupperyn可以消除检查大小写的需要。

do
{
     printf("Do you want to install this program? y/n: ");
     scanf(" %c", &yn);
}
while(tolower(yn) != 'n' && tolower(yn) != 'y');

if(tolower(yn) == 'n')
{
     printf("Exiting program\n");
}
else
{
     printf("Installing ...\n");
}

答案 2 :(得分:1)

fgets可用于捕获输入。它的优点是能够在字符过多或字符不正确的情况下清除输入流。

#include <stdio.h>
#include <string.h>

int main ( void) {
    char input[3] = "";//can hold one char a newline and a '\0'

    printf("Do you want to install this programme? y/n: ");

    do {
        printf ( "\nenter y or n\n:");
        if ( fgets ( input, sizeof input, stdin)) {
            if ( !strchr ( input, '\n')) {//is there a newline?
                while ( !strchr ( input, '\n')) {//call until newline is found to clear input
                    if ( !fgets ( input, sizeof input, stdin)) {
                        fprintf ( stderr, "\nEOF problem\n");
                        return 1;
                    }
                }
                input[0] = 0;
                printf ( "\ntoo many characters. try again.");
            }
        }
        else {
            fprintf ( stderr, "\nEOF problem\n");
            return 1;
        }
        if ( input[0] == 'y' || input[0] == 'Y') {
            printf("Installing...\n");
        }
        if ( input[0] == 'n' || input[0] == 'N') {
            printf("Exiting programme!\n");
        }
    } while ( input[0] != 'y' && input[0] != 'n' && input[0] != 'Y' && input[0] != 'N');

    return 0;
}

答案 3 :(得分:0)

解决了!

这是有效的代码。感谢@govindparmar。

#include <stdio.h>

int main() {

    char yn;

    do {
    printf("Do you want to install this programme? y/n: ");
    scanf(" %c", &yn);
    }
    while(yn != 'n' && yn != 'N' && yn != 'y' && yn != 'Y');

    if(yn == 'n' ||  yn == 'N') {
    printf("Exiting programe!\n");
    }
    else {
    printf("Installing...\n");
    }

    printf("It works!\n");

    return 0;
}