Jones Vitolo
Jones Vitolo

Reputation: 11

how to stop a while loop to enter, in the same variable

I have to enter random names and weights and finish the loop when I hit enter instead of the name. However the way I used to detect the enter does not serve to take the name so getting two variables. The question is how to put the enter of the test and name using the same variable

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


int main() {

    int c, weight[1000], i = 0;
    char name[1000];
    puts ("Enter the person's name or only enter to end the program");
    if ((c = getchar() == '\n')) {




    } else {

        while (c != '\n') {
            printf("Enter the name");
            scanf("%s", &nome[i]);
            i++;
            printf("Enter the \n");
            scanf("%i", &weight[i]);

        }
    }

    return 0;
}

Upvotes: 0

Views: 107

Answers (2)

Weather Vane
Weather Vane

Reputation: 34585

Here is a simple example

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

int main(void)
{
    char name[1000] = {0};                      // initialise
    puts ("Enter the person's name or only enter to end the program");
    if (fgets(name, sizeof(name), stdin) != NULL) {
        name [ strcspn(name, "\r\n") ] = 0;     // remove trailing newline etc
        if (strlen(name)) {
            printf("The name entered was: %s\n", name);
        } 
        else {
            printf("You did not enter a name\n");
        }
    }
    return 0;
}

Upvotes: 2

Lee Daniel Crocker
Lee Daniel Crocker

Reputation: 13171

First off, names is an array of characters and you're treating it like an array of strings. Secondly, loops that need to exit based on input are most clearly expressed with break:

char *names[1000];
int count = 0;

while (1) {
    char *r, buf[1000];
    int len;

    char *r = fgets(buf, 1000, stdin);
    if (NULL == r) break;                 // EOF
    if ((len = strlen(buf)) < 2) break;  // NL only

    r = malloc(len + 1);
    if (NULL == r) break;
    strcpy(r, buf);
    names[count] = r;
    count += 1;

    ...
}

...

Upvotes: 1

Related Questions