C语言 在这种情况下,我应该如何使用if语句?[已关闭]

niwlg2el  于 2023-04-11  发布在  其他
关注(0)|答案(1)|浏览(148)

已关闭,此问题需要更focused,目前不接受回答。
**要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。

昨天关门了。
Improve this question
我是一个初学者在C.我必须写一个程序,我问用户一些问题,我必须存储在不同的变量他们的答案.如果第一个问题的答案是一个特定的字符,我不需要问下一个问题.
例如,

#include <stdio.h>

void question_1 (char* answer_1) {
    printf("choose a letter\n");
    scanf("%c", answer_1);
}

void question_2 (char* answer_2) {
    printf("choose another letter\n");
    scanf("%c", answer_2);
}

int main() {
    char answer_1 = 0;
    question_1(&answer_1);
    printf(" %c\n", answer_1);
    char answer_2 = 0;
    question_2(&answer_2);
    printf(" %c\n", answer_2);
    
    return 0;
}

如果answer_1 = a,则不应询问问题_2
我想用一个if来做,但我不确定在条件中写什么,把它放在哪里,如果用第一个问题,用第二个,或者在主函数中。

m3eecexj

m3eecexj1#

如果你想让函数question1返回用户输入的字符,那么你不应该让参数类型为char,而是返回类型,如下所示:

char question_1( void )
{
    char answer;

    printf( "Please enter a character: " );
    if ( scanf( " %c", &answer ) == 1 )
    {
        return answer;
    }

    printf( "Invalid input!\n" );
    exit( EXIT_FAILURE );
}

另外,当使用scanf输入字符时,通常最好使用格式字符串" %c"而不是"%c",这样所有前导空格字符都会被丢弃,包括可能是以前调用scanf时留下的换行符。这就是为什么我在上面的代码中使用该格式字符串的原因。
你应该对函数question_2做同样的事情,它也有同样的问题。
如果你想让question_2只在question_1的答案没有'a'的值时被调用,那么你可以使用if语句,如下所示:

#include <stdio.h>
#include <stdlib.h>

//forward declarations
char question_1( void );
char question_2( void );

int main( void )
{
    char answer_1, answer_2;

    answer_1 = question_1();
    printf( "Answer to question 1: %c\n", answer_1 );

    if ( answer_1 != 'a' )
    {
        answer_2 = question_2();
        printf( "Answer to question 2: %c\n", answer_2 );
    }
}

char question_1( void )
{
    char answer;

    printf( "Please enter a character for question 1: " );
    if ( scanf( " %c", &answer ) == 1 )
    {
        return answer;
    }

    printf( "Invalid input!\n" );
    exit( EXIT_FAILURE );
}

char question_2( void )
{
    char answer;

    printf( "Please enter a character for question 2: " );
    if ( scanf( " %c", &answer ) == 1 )
    {
        return answer;
    }

    printf( "Invalid input!\n" );
    exit( EXIT_FAILURE );
}

此程序具有以下行为:
测试1:

Please enter a character for question 1: a
Answer to question 1: a

测试二:

Please enter a character for question 1: b
Answer to question 1: b
Please enter a character for question 2: c
Answer to question 2: c

但是,一般不建议使用scanf进行基于行的用户输入。即使使用格式字符串" %c"而不是"%c",程序也会出现以下问题:
如果用户输入"bc"作为第一个问题的答案,那么字符'c'将被解释为第二个问题的答案,即使这个问题还没有被问到:

Please enter a character for question 1: bc
Answer to question 1: b
Please enter a character for question 2: Answer to question 2: c

因此,通常建议使用函数fgets读取整行输入。有关详细信息,请参阅以下问题:
What can I use for input conversion instead of scanf?

相关问题