Search code examples
cwhile-loopc-stringsfgetsstrcat

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')


Solution

  • 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' };