C 程序只运行第一个循环然后停止

时间:2021-04-12 16:33:41

标签: c

每次我尝试运行时只运行第一个循环。它询问售出了多少商品,然后停止运行。我不确定我做错了什么。如果有人有任何很棒的提示(如果有一些格式问题,那么我不会让我在没有它们的情况下发布问题)。

其他一切看起来都不错,但如果可以进行任何其他改进,请告诉我。

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

int digit(char term[])
{
    int i = 0;
    int val = 0;
    while (term[i] != '\0')
    {
        val = val * 10 + term[i] - '0';
        i++; 
    } 
    return val;
}

void error()
{
    printf("Error: Sales figures must be numbers.\n");
    printf("Please try again.\n");
}

bool isnumber(char term[])
{
    int i = 0;
    while (term[i])
    {
        if( isdigit(term[i]) == 0)
        {
            return false;
            i++;
        }    
    }
    return true;
}

int main()
{
    int sales[3][2], costs[3] = {3, 4, 1}, weekends[2] = {0, 0};

    int i, j, val;

    char term[100];

    while (1)
    {
        printf("Number of Bagel sales on Saturday: ");
        scanf("%s", term);
        if( isnumber(term) == false)
        {
            error;
        }
        else
        {
            sales[0][0] = digit(term);
            break;
        }
    }
    
    while (1)
    {
        printf("Number of Flatbread sales on Saturday: ");
        scanf("%s", term);
        if( isnumber(term) == false)
        {
            error;
        }
        else
        {
            sales[1][0] = digit(term);
            break;
        }
    }
    
    while (1)
    {
        
        printf("Number of Muffin sales on Saturday: ");
        scanf("%s", term);
        if (isnumber(term) == false)
        {
            error;
        }
        else
        {
            sales[2][0] = digit(term);
            break;
        }
    }
    
    while (1)
    {
        printf("Number of Bagel sales on Sunday: ");
        scanf("%s", term);
        if( isnumber(term) == false)
        {
            error;
        }
        else
        {
            sales[0][1] = digit(term);
            break;
        }
    }
    
    while (1)
    {
        printf("Number of Flatbread sales on Sunday: ");
        scanf("%s", term);
        if( isnumber(term) == false)
        {
            error;
        }
        else
        {
            sales[1][1] = digit(term);
            break;
        }
    }
    
    while (1)
    {
        printf("Number of Muffin sales on Sunday: ");
        scanf("%s", term);
        if( isnumber(term) == false)
        {
            error;
        }
        else
        {
            sales[2][1] = digit(term);
            break;
        }
    }
    
    for (i = 0; i < 2, i++;)
    {
        for (j = 0; j < 3, j++;)
        {
            weekends[i] += costs[j] * sales[i][j];
        }
    }
    
    printf("\n");
    for (i = 0; i < 3, i++;)
    {
        printf("%d", costs[i]);
        
    }
    printf(".");
    for (i = 0; i < 3, i++;)
    {
        for (j = 0; j < 2, j++;)
        {
            printf("%d", sales[i][j]);
        }
        if (i == 0)
        {
            printf(" = ");
            printf("%d %d", weekends[0], weekends[1]);
        }
        printf("\n    ");
    }
    
    printf("\nTotal sales on Saturday: $%d", weekends[0]);
    printf("\nTotal sales on Sunday: $%d", weekends[1]);
    printf("\nTotal sales over the weekend: $%d", weekends[0] + weekends[1]);
    return 0;
}

3 个答案:

答案 0 :(得分:3)

您在 isnumber() 中有一个无限循环。如果第一个字符不是数字,它将返回 false。但是如果第一个字符是数字,它永远不会增加 i,所以它会不断重复测试第一个字符。

i++ 不应出现在 if 语句中。

bool isnumber(char term[])
{
    int i = 0;
    while (term[i])
    {
        if(!isdigit(term[i]))
        {
            return false;
        }
        i++;
    }
    return true;
}

正如其他人指出的那样,您需要将 () 放在 error 之后才能调用它。

答案 1 :(得分:0)

至于你的编程停止;您在第 30 行使用 isdigit 而不声明它。

同时,您可以在任何地方使用 error 而无需调用它。使用 error() 调用函数并打印错误信息。

还有一个小的格式提示:使用 if (something == false) 代替 if (!something)

答案 2 :(得分:-1)

您对 error; 的使用不正确。您应该改写 error();

相关问题