如果其他字符逻辑是有缺陷的

时间:2014-02-19 06:39:07

标签: c++ c

好的,我现在正尝试使用check_status()下面的函数检查代码。

他们在代码中没有错误,但我想我搞砸了逻辑。 我想要做什么,当它运行时放入S,并打印“正确的答案.S”

现在代码工作正常,当你输入FEFWRGV或不是S,SH,MJ,MS的东西时打印出错误信息。 然而!当你输入SSDFIEWF或其他类似的东西时,它会说“正确的答案。”

我检查是否输入S的方式是 if(status [0] =='S')

有没有办法可以编写如下代码: if(status [0] =='S'&& status [1] == void)

因为我知道我在做什么是检查状态[0]然后我想确保没有使用状态[1]。

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

//functions called
float wages_loop();
float other_loop();
float interest_loop();
void check_status();


//start main 
int main(void)
{
    char status[10], another[10];
    char buffer[80];

    float wages, other_income, interest, dividends, test;
    int dependents;
    int single_acc = 0, mj_acc = 0, ms_acc = 0, sh_acc = 0;

    printf("Would you like to start: ");
    gets_s(another);

    if (another[0] != 'y' && another[0] != 'n')
    {
        while (another[0] != 'y' && another[0] != 'n')
        {
            printf("\n\n INCORRCT ANSWER. \n\n");
            printf("\n Would you like to start. (y or n)");
            gets_s(another);
        }
    }
    while (another[0] == 'y')
    {


        check_status();


        interest = 0;


        printf("\n\n\t\t Your interest is: %.2f \n", interest);
        system("pause");

        printf("Would you like anoter: ");
        gets_s(another);

        if (another[0] != 'y' && another[0] != 'n')
        {
            while (another[0] != 'y' && another[0] != 'n')
            {
                printf("\n\n INCORRCT ANSWER. \n\n");
                printf("\n Would you like anoter. (y or n)");
                gets_s(another);
            }
        }

    } //end loop

    printf("\n\n\t\t\t Number of Singles filleing: %i \n", single_acc);

    return 0;

}//end main



void check_status()
{
    char status[10];
    int check = 0;

    while (check != 1)
    {
        printf("What is your Status: ");
        gets_s(status);

        if (status[0] == 'S' && status[1] == 'H')
        {
            printf("\n\n CORRECT ANSWER. SH \n\n");
            check = 1;
        }
        else if (status[0] == 'S')
        {
            printf("\n\n CORRECT  ANSWER. S \n\n");
            check = 1;
        }
        else if (status[0] == 'M' && status[1] == 'J')
        {
            printf("\n\n CORRECT ANSWER. MJ \n\n");
            check = 1;
        }
        else if (status[0] == 'M' && status[1] == 'S')
        {
            printf("\n\n CORRECT ANSWER. MS \n\n");
            check = 1;
        }
        else
        {
            printf("\n\n INCORRECT ANSWER. noting \n\n");
        }
    }   
}

1 个答案:

答案 0 :(得分:4)

  

有没有办法可以编写如下代码:if(status [0] =='S'&amp;&amp; status 1 == void)

你差不多了。 C-“string”-termination不是void而是'\0'

因此要测试“字符串”是否在1 st 字符后结束,即status[0]执行以下操作:

if (status[0] == 'S' && status[1] == '\0') 

顺便说一句:要声明一个没有任何参数的函数,请使用void,如下所示:

check_status(void);

由于Joachim Pileborg已就您的问题发表了评论,因此您错误地使用了gets_s()gets_s() takes two parameters

编译器应该已经警告过你这个缺少的第二个参数。

严肃对待此类警告是个好主意。