C 当while循环在某个条件下为false时,如何中断该循环
我试着做一个程序,如果我输入一个整数,程序会找出较大的数字,然后用较小的数字减去它。这部分,我明白了 问题是,无限循环部分 我试着让C 当while循环在某个条件下为false时,如何中断该循环,c,while-loop,integer,C,While Loop,Integer,我试着做一个程序,如果我输入一个整数,程序会找出较大的数字,然后用较小的数字减去它。这部分,我明白了 问题是,无限循环部分 我试着让输入两个整数用while循环继续打印,当至少输入一个字符时,中断 例如,如果我输入2@,它将中断 但是我找不到写作的地方来打破在代码中,因此每当我输入一个字符时,它将继续创建一个无限循环 有没有办法在这个代码中创建一个中断?我谦恭地寻求建议 以下是我无法将中断的代码 (顺便说一句,我之所以在while assizeof(I)==4 | | sizeof(j)==4中
输入两个整数
用while循环继续打印,当至少输入一个字符时,中断
例如,如果我输入2@
,它将中断
但是我找不到写作的地方来打破代码>在代码中,因此每当我输入一个字符时,它将继续创建一个无限循环
有没有办法在这个代码中创建一个中断?我谦恭地寻求建议
以下是我无法将中断的代码
(顺便说一句,我之所以在while assizeof(I)==4 | | sizeof(j)==4
中设置该条件,是为了使它只输入一个整数,因为整数的大小是4)
这里有一个代码,我去掉了sizeof
并使用了while(1)
,虽然中断
不起作用这一事实没有太大变化
int main()
{
int i, j;
int result;
while (1){
printf("type in two integers : ");
scanf("%d %d", &i, &j);
if (i < j) {
result = j - i;
}
else if (j < i) {
result = i - j;
}
printf("%d\n", result);
}
return 0;
}
intmain()
{
int i,j;
int结果;
而(1){
printf(“输入两个整数:”);
scanf(“%d%d”、&i和&j);
if(i
您不能使用sizeof(i)
执行运行时检查!这是一个编译时间常量,在您的情况下(32位整数)将始终计算为4
为了检查是否给出了两个有效整数,您可以检查scanf
函数的返回值(它给出了成功扫描的字段数):
#包括
int main()
{
int i,j;
int结果;
而(1){
printf(“输入两个整数:”);
if(scanf(“%d%d”,&i,&j)!=2)break;//如果我们没有得到两个整数,请在这里中断
if(i
请随时询问fir进一步的澄清和/或解释。放弃“内部有中断的无限循环”的整个概念。
根据scanf()
的返回值为循环设置一个条件,这实际上就是它的设计目的
#include <stdio.h>
int main()
{
/* always init everything */
int i=0, j=0;
int result=0;
printf("type in two integers : ");
while (2==scanf("%d %d", &i, &j))
{
if (i < j) {
result = j - i;
}
else /* removed second if, to have a meaningful result for i==j */
{
result = i - j;
}
printf("%d\n", result);
printf("type in two integers : ");
}
return 0;
}
尝试while(2==scanf(“%d%d”,&i,&j))
。如果我正确理解了你的问题,应该会有帮助。哇!非常感谢你。如果不麻烦的话,请您对scanf(“%d%d”、&i和&j)!=2
。更具体地说,关于为什么它是2
?这是因为true&true==1&1==1+1==2吗?正如我所说,scanf
返回它成功读取的值的数量。如果输入12
,它将读取两个整数,并返回2
(成功);如果输入1$
,它将只读取一个整数并返回1
(失败);同样,如果您输入“&2”,它将返回0
。但是请注意:使用scanf
功能有很多危险!如果您输入2 0.1
,它将成功读取两个整数(2
和0
),但下一轮将失败-因为
字符留在输入缓冲区中。感谢您对我的代码以及替代代码的具体评论!另外,我想在(…)
时在do{…}上试一试。如果不麻烦的话,代码是否可以使用这个?所以如果我写的是对的,我可以匹配吗?我的荣幸。事实证明,它没有我想象的那么优雅,因为我无法避免额外的if
来获得漂亮的输出。我仍然比while
选项更喜欢它,因为我更喜欢额外但直接的if
而不是加倍输出行。在我看来/以我的经验,输出行比逻辑(一旦测试)更有可能被更改。现在,你的do while
代码类似吗?注意,我同意@AdrianMole对另一个答案的评论警告,这绝对适用于我的答案。有关scanf陷阱的更多信息,请参阅这篇非常有趣的文章:
int main()
{
int i, j;
int result;
while (1){
printf("type in two integers : ");
scanf("%d %d", &i, &j);
if (i < j) {
result = j - i;
}
else if (j < i) {
result = i - j;
}
printf("%d\n", result);
}
return 0;
}
#include <stdio.h>
int main()
{
/* always init everything */
int i=0, j=0;
int result=0;
printf("type in two integers : ");
while (2==scanf("%d %d", &i, &j))
{
if (i < j) {
result = j - i;
}
else /* removed second if, to have a meaningful result for i==j */
{
result = i - j;
}
printf("%d\n", result);
printf("type in two integers : ");
}
return 0;
}
#include <stdio.h>
int main()
{
/* always init everything */
int i=0, j=0;
int result=0;
int iScanned=0;
do
{
printf("type in two integers : ");
iScanned=scanf("%d %d", &i, &j); /* keep the return value for loop */
if (i < j) {
result = j - i;
}
else /* removed second if, to have a meaningful result for i==j */
{
result = i - j;
}
if(2==iScanned) printf("%d\n", result); /* if to avoid awkward last output */
} while (2==iScanned);
return 0;
}