【问题标题】:getting out of loop, after the input ends退出循环,输入结束后
【发布时间】:2022-01-18 15:16:58
【问题描述】:

所以,我得到了一个输入列表:

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)

它似乎没有工作。 任何想法或建议都会很棒!

【问题讨论】:

    标签: arrays c char scanf user-input


    【解决方案1】:

    如果你在读取之前清除输入字符串,并让你的退出条件为“空字符串”,你应该没问题:

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

    【讨论】:

    • 但它会在第一个数字结束,其交叉和为 7,并忽略其余的......它必须运行到输入结束 @mmixLinus
    • @Sjo9 好的,误解了你的结束标准。编辑了我的答案。
    • 我试过了,但是当我按下回车键时它并没有终止程序
    • @Sjo9 是的,name 中可能有换行符。也修复了该结束条件。
    • 它真的对我不起作用,scanf 试图避免读取空格并等到用户提供任何输入,如果我使用 EOF,它只会继续无限循环,最后一个数字 i输入
    【解决方案2】:

    您可以从此更改条件

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

    到这里

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-19
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      • 2014-12-12
      相关资源
      最近更新 更多