我想问一下c语言循环语句的问题~

图片说明图片说明
这是我的代码

 #include <stdio.h>
void main()                     
{int a,n=0,i,j,k,t;            
scanf("%d",&a);              
for(t=100;t<=999;t+=1)                     
{i=t/100;            
j=t/10%10;            
k=t%10;            
if(i+j+k==7) n+=1;            
if(n==a) printf("%d\n",t);              
}                  
}  

我使用了循环语句,但是结果出来很多数字 我不明白后面那些如何出来的,,,按说if(n==a)应该只有一种情况 a是输入的 然后n一直增加呀,,,

第二个回答是正确的,你在循环的时候如果你的需求是遍历并处理所有的数据,则不需要跳出语句,但是如果你不是要遍历并处理所有的数据,只是需要其中几个或一个的时候,一定要注意跳出循环
for(t=100;t<=999;t+=1)

{
i=t/100;

j=t/10%10;

k=t%10;

if(i+j+k==7)
n+=1;

if(n==a)
{
//你这里的意思是如果n==a,则输出所有的第一个数字为一的,且个位,十位,百位之和为7的数字
printf("%d\n",t);

}
}

n加到等于a的时候,就开始打印,到n再+1,停止打印

lz的错误是少了一个跳出循环的条件,

 if(n==a) {
        printf("%d\n",t);
        break;
 }

这样就可以了

t=107的时候,n不自加,n=1,n==a,输出t;
可以将所有满足要求的数按顺序存到数组里面,然后调用,输出

#include
void main()

{
int a,n=0,i,j,k,t;

scanf("%d",&a);

for(t=100;t<=999;t+=1)

{
i=t/100;

j=t/10%10;

k=t%10;

if((i+j+k)==7)
n+=1;

if(n==a)
{
printf("%d\n",t);
break ;
}
}

}

缺少一个break,当n = 1时,t = 106,之后107,108...,n一直是1,都会有n==a,知道t = 115,n会等于2,之后就不会再输出t了

输出地方判断有误的哦!你这样会输出从第一个满足条件的数到下一个满足个十百等于7的数字。因为这中间n一直没有变,满足你的输出条件。

应该在输出完成第一次后处理n的值