Почему fgets и gets не работают для чтения строк в структуру? - PullRequest
0 голосов
/ 03 ноября 2019

Мой код для чтения строки в структуру не работает. Я пробовал fgets, gets, а также scanf, и ни один из них не работает, возвращая случайные символы при запуске кода. Может ли кто-нибудь помочь мне? Заранее спасибо.

#include <stdio.h>
#include <stdlib.h>

struct student
{
    char string[100];
};

struct student get_detail(int n)
{
    struct student wannabe;
    if (n==1)
    {
        printf("String:\n");
        scanf("%s", wannabe.string);
        //fgets(wannabe.string, 100, stdin) didn't work;
        //gets (wannabe.string) also didn't work
        //scanf("%s", wannabe.string) didn't work
        return wannabe;
    }
}
void main()
{
    int x = 1;
    struct student test = get_detail(x);
    printf("\nString:%s", test.string);

}

1 Ответ

3 голосов
/ 03 ноября 2019

@Kamil Cuk прав: измените тип возврата main на int. Ваш код работает для меня так, как вы его опубликовали, после исправления в int main () и добавления return wannabe;перед закрытием} внутри get_detail

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

struct student 
{
    char string[100];
};

struct student get_detail(int n)
{
    struct student wannabe;
    char ch;

    if (n == 1)
    {
        printf("String:\n");
        fgets(wannabe.string, 100, stdin);
        strtok(wannabe.string, "\n");
        if (strlen(wannabe.string) == 100 - 1) 
        {
            while ((ch = getchar()) != '\n' && ch != EOF); // getchar() in loop to clean stdin
        }
        wannabe.string[strcspn(wannabe.string, "\n")] = 0; // to remove '\n' if the user does not type anything
    }

    return wannabe;
}

int main()
{
    int x = 1;
    struct student test = get_detail(x);
    printf("\nString: %s\n", test.string);

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...