因此,我得到了一个输入列表:
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) {
它将适用于每一个输入。添加空格将忽略换行符。