所以,我有一个程序来检查三角形是否有效,这是代码。
#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);
...
输入的数量应该是用户想要检查的三角形数量。
奖金问题:如何检查用户只输入了一个数字而没有输入任何字母。 提前谢谢。
答案 0 :(得分:1)
在
scanf("%", &repeats);
必须
scanf("%d", &repeats);
repeats
是int
。
您可以将要重复执行的代码块放在像
这样的循环中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);