如果是其他函数....如何使用return

时间:2016-09-12 09:55:13

标签: process

#include <stdio.h>
#include <cs50.h>

int GetPositiveInt();
int main (void)
{
    int min; /*variable to hold minutes*/
    printf ("How many minutes does it take you to use a shower?");
    scanf ("%d", &min);
    int numbtl = min * 12; /*computes number of bottles*/
    if (min > 0)
    {
        printf ("Taking a shower you use %d bottles of water", numbtl);
    }
    else
    {
        printf ("Please enter the positive number: \n");
        scanf ("%d", &min);}
        return min;
    }
}

我写过这个程序,但我在其他地方有一些错误。 这是我试图执行该程序的文本。

~/workspace/pset1/ $ make water
clang -ggdb3 -O0 -std=c11 -Wall -Werror -Wshadow    water.c  -lcs50 -lm -o water
~/workspace/pset1/ $ ./water
How many minutes does it take you to use a shower?0
Please enter the positive number: 
10
~/workspace/pset1/ $ 

让我说明这个代码及其执行的含义。此代码用于计算淋浴时使用的瓶装水量。 1分钟的淋浴等于12瓶。

如果输入正整数(例如10),结果将如下所示:洗澡时使用120瓶水。但是如果输入0或负整数,程序将要求您输入正整数。这是问题发生的时候。输入正整数后,我得到0瓶的结果。

3 个答案:

答案 0 :(得分:1)

让我们分解您的计划,看看它在做什么;第一

int GetPositiveInt();

对于从未使用或定义的函数是forward declaration,您可以完全删除它。

int main (void)
{
    int min; /*variable to hold minutes*/
    printf ("How many minutes does it take you to use a shower?");
    scanf ("%d", &min);

这里我们定义main函数(c程序的入口点)并声明一个名为int的{​​{1}}类型的变量。然后打印出一行询问用户输入并读取他们的响应,将其存储在min变量中。

min

在此处理 int numbtl = min * 12; /*computes number of bottles*/ ,将其乘以12并将结果存储在min中。

numbtl

在此检查 if (min > 0) { printf ("Taking a shower you use %d bottles of water", numbtl); } 是否有效,如果是,则打印回复。在这里你可以看到你的程序的成功路径是正确的,问题是当min不大于0时会发生什么。(注意在下一位中有一个小的格式化错误,我通过我的假设更正了意味着 - 请注意,这就是正确的缩进和格式化很重要的原因。)

min

如果 else { printf ("Please enter the positive number: \n"); scanf ("%d", &min); } 无效(即小于或等于0),那么您要求另一个输入并将其存储在min

min

最后,你返回以min为单位存储的内容。请注意,除了返回它之外,你永远不会对第二个值做任何事情。

附注:main上的返回值用作应用程序的退出状态。您可以使用 return min; } 在bash中查看最后一个命令的退出状态。

echo $?

这可能不是你想要的。退出状态通常为0表示成功,否则为正数。最后一次返回,您可能希望$ ./water How many minutes does it take you to use a shower? 2 Taking a shower you use 24 bottles of water $ echo $? 2 表示您的程序已成功运行。

现在对于程序的逻辑,你想要做的是从用户那里获得一些输入;验证它(如果无效则获得新的输入);然后处理它。因此,首先要做的是将处理移至程序的最后

return 0

现在我们只需要获取并验证用户输入;这样做的典型算法是:

int main (void)
{
    int min; /*variable to hold minutes*/
    ...
    int numbtl = min * 12; /*computes number of bottles*/
    printf ("Taking a shower you use %d bottles of water", numbtl);
    return 0;
}

将此转换为c您的应用程序最终会以;

prompt for user input
while (input is not valid) {
    reprompt for user input
}
process user input

这将继续向用户询问正数,直到他们输入一个或点击 crtl + c 来终止命令。一旦获得有效数字,它将处理它并打印出结果。

答案 1 :(得分:0)

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

int main (void)
{
    long min;
    char msg[255];

    strcpy(msg,"How many minutes does it take you to use a shower?\n");

    do {
            printf ("%s", msg);
            scanf ("%lu", &min);
            strcpy(msg , "Please enter the positive number: \n");

    }while( min <= 0 );



    long numbtl = min * 12; /*computes number of bottles*/

    printf ("Taking a shower you use %lu bottles of water", numbtl);


  return 0;
}

答案 2 :(得分:0)

您还可以使用转到标签。在这里,我使用了一个名为start的goto标签。如果输入的数字小于零,则程序进入程序的开头。希望能帮助到你。

#include<stdio.h>

int main (void)
{
    int min; /*variable to hold minutes*/
    start :
    printf ("How many minutes does it take you to use a shower?\nEnter here : ");
    scanf ("%d", &min);
    if (min <= 0)
    {
       printf("Enter a number grater than zero\n\n");
       goto start;
    }
    int numbtl = min * 12; /*computes number of bottles*/
    printf ("Taking a shower you use %d bottles of water", numbtl);
    return 0;
}