简体   繁体   中英

Trying to break out of fgets while loop

#include <stdio.h>
#include <string.h>

int main(){
    char c[20], result[50];
    int bool = 0, count = 0, i;
    
    while(fgets(c,20,stdin) != NULL){
        int stringSize = strlen(c);
        if(stringSize == 11){
            
            int ascii = (int)(c[i]);
            
            for(i = 0; i < stringSize; i++){
            
                if(ascii >= 'A' && ascii <= 'Z'){
                    bool = 1;
                }
            }
        }
    }
        if(bool == 1){
            count++;
            strcat(result,c);
        }
    
    printf("%d", count);
    printf("%s",result);
}

Good morning, I am fairly new to programming, and I've spent quite a while Googling and searching around for this issue already, but I can't seem to wrap my head about it. Basically I'm trying to filter an fgets so that it reads each string, and if they're capital letters, they're "valid". However, I can't even get the fgets to stop accepting more input.

Edit: The idea is to store in result every String that has 10 capital letters, and for the fgets while loop to break once the user gives no input ('\0')

If you are entering strings from the standard input stream then it is better to rewrite the condition of the while loop the following way

while( fgets(c,20,stdin) != NULL && c[0] != '\n' ){

In this case if the user just pressed the Enter key without entering a string then the loop stops its iterations.

Pay attention to that fgets can append the new line character '\n' to the entered string. You should remove it like

c[ strcspn( c, "\n" ) ] = '\0';

Then you could write

size_t n = strlen( c );

if ( n == 10 )
{
    size_t i = 0;
    while ( i != n && 'A' <= c[i] && c[i] <= 'Z' ) ++i;

    bool = i == 10;
}

Pay attention to that it is a bad idea to use the name bool because such a name is introduced as a macro in the header <stdbool.h> .

Also it seems this if statement

    if(bool == 1){
        count++;
        strcat(result,c);
    }

must be within the while loop. And the array result must be initially initialized

char c[20], result[50] = { '\0' };

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM