在输入结束后退出循环



因此,我得到了一个输入列表:

hello
123456
124
5223
food
7

我必须做的是,查看列表中的每一个元素,并检查交叉和是否等于7(例如:124=1+2+4=7,意味着数字有效(因此,我们得到的输出必须是:(在控制台中应该是这样的:(

hello
hello is invalid
123456
123456 is invalid
124
124 is valid
5223
5223 is invalid
food
food is invalid
7
7 is valid

这是我写的程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 99    
int cross_sum(int length ,char *name){
int sum = 0;
for(int i = 0; i < length ; i++){
if(name[i] != 0){
sum = sum +( name[i] -48);
}
}
return sum;
}
int check_crosssum( int number){
if( number % 10 == 7)
{
return 0;
}   
return -1;
}

int main (void) {

char name[MAXN] ;
int sum = 0;

while (scanf("%98[^n]", name) == 1)  {         
int len = strlen(name);
sum = cross_sum(len,name);
int pruf_summe = check_crosssum(sum);
if( pruf_summe == 0 && len <= 20  ){
printf("%s is valid n" , name);
}
else{
printf("%s is invalid n" , name);
}
}

return 0;
}

当我运行这个程序时,它所做的一切都是看第一个元素,然后结束它。所以我得到的输出是:

hello
hello is invalid
----------
(program exited with code: 0) 

如何在while循环的帮助下单独处理每个输入?或者还有其他方式,程序运行到没有输入!我也试过

while(1)

它似乎不起作用。任何想法或建议都很棒!

如果在读取输入字符串之前清除它,并使退出条件为"空字符串";,你应该没事的:

int sum = 0;
do {
name[0] = '';
scanf("%s", name);
...
} while (strlen(name) > 1);   

您可以从此更改条件

while (scanf("%98[^n]", name) == 1)

到这个

while (scanf(" %98[^n]", name) == 1)  {

它将适用于每一个输入。添加空格将忽略换行符。

相关内容

  • 没有找到相关文章

最新更新