如何让程序重复一定次数?

时间:2017-10-22 14:59:58

标签: c gcc

所以,我有一个程序来检查三角形是否有效,这是代码。

#include <stdio.h>  

int main()  
{  
    int side1, side2, side3; 

    /* Initially assume that the triangle is not valid */
    int valid = 0;

    /* Input all three sides of a triangle */  
    printf("Enter three sides of triangle: \n");  
    scanf("%d%d%d", &side1, &side2, &side3);  

    if((side1 + side2) > side3)  
    {  
        if((side2 + side3) > side1)  
        {  
            if((side1 + side3) > side2)
            {  
                /*
                 * If side1 + side2 > side3 and
                 *    side2 + side3 > side1 and
                 *    side1 + side3 > side2 then
                 * the triangle is valid. Hence set
                 * valid variable to 1.
                 */
                valid = 1;
            }  
        }
    }  

    /* Check valid flag variable */
    if(valid == 1)
    {
        printf("Triangle is valid.");
    }
    else
    {
        printf("Triangle is not valid.");
    }

    return 0;
}

但我想要做的是添加一个提示,询问要检查多少个三角形,所以我会添加这样的东西

#include <stdio.h>  

int main()  
{  
    int repeats; 

    /* Input the amount of repeats  */  
    printf(" the amount of repeats: \n");  
    scanf("%", &repeats);
...

输入的数量应该是用户想要检查的三角形数量。

奖金问题:如何检查用户只输入了一个数字而没有输入任何字母。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

scanf("%", &repeats);

必须

scanf("%d", &repeats);

repeatsint

您可以将要重复执行的代码块放在像

这样的循环中
for(i=0; i<repeats; ++i)
{
    //your code
}

要检查用户是否输入了数字而不是字符,请检查scanf()的返回值。它返回它所做的成功分配的数量。

由于

中的格式说明符为%d
scanf("%d", &repeats);

scanf()需要一个整数。但是如果给出一个字符,它就不会分配(并且在这种情况下会返回0)并且输入(不是数字)将在输入缓冲区中保持未消耗。

if( scanf("%d", &repeats)!=1 )
{
    //value was not read into 'repeats'
}
您可能会对

This感兴趣。

现在,如果输入缓冲区中仍存在无效输入,则可能会导致下一个scanf()出现问题。所以必须以某种方式消费。

您可以执行类似

的操作
int ch;
while( (ch=getchar())!='\n' && ch!=EOF );

这将从输入缓冲区消耗到下一个新行(\n)。

看看here

和你的

if((side1 + side2) > side3)  
{  
    if((side2 + side3) > side1)  
    {  
        if((side1 + side3) > side2)
        {  
            valid = 1;
        }  
    }
} 

可以制作

if( (side1 + side2)>side3 && (side2 + side3)>side1 &&  (side1+side3)>side2 )
{  
    valid = 1;
} 

并且你并不需要额外的括号,因为算术运算符的优先级高于关系运算符,而关系运算符的优先级高于逻辑运算符。

here

答案 1 :(得分:0)

你可以通过在代码周围包装do来实现这一点,使它看起来像那样

#include <stdio.h>  

int main()  
{  
    int repeats = 0, counter = 0; 

    /* Input the amount of repeats  */  
    printf(" the amount of repeats: \n");  
    scanf("%d", &repeats);

    do {
     ...
     check here if its a triangle
     ...
     counter++;

    } while(counter < repeats);