【问题标题】:structures programm not working correctly结构程序无法正常工作
【发布时间】:2021-12-26 20:03:53
【问题描述】:

我想尝试函数 malloc 和指向结构的指针,但是当我编译和运行程序时,它只打印第一个和第二个输入,但第三个输入没有被打印,我认为它是缓冲区溢出或其他什么,我不能找到有问题的地方

#include <malloc.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define max 30


char *NL(char *string);

int main()
{


    struct menschen
    {
        char name_usa[max];
        int anzahl;
        char Anfuerer[max];
    };
    int f = 0;
    char *input;
    input = malloc(max);
    struct menschen *mensch;
    mensch = malloc(sizeof(struct menschen));

    printf("Bitte eingeben wer der Praesident der USA ist:  ");
    fgets(input, max, stdin);
    NL(input);
    strcpy(mensch->name_usa, input);

    printf("Bitte eingeben, wie viele menschen auf der welt leben:  ");
    scanf("%i", &f);
    mensch->anzahl = f;

    printf("Bitte eingeben wer der typen ist:  ");
    fgets(input, max, stdin);
    NL(input);
    strcpy(mensch->Anfuerer, input);


    printf("Der Name des Praesidenten der USA ist %s. Die Anzahl der Menschen die Auf der erde leben, ist %i. Der Name des typen ist %s.", mensch->name_usa, mensch->anzahl, mensch->Anfuerer);

    free(mensch);
    free(input);

    return 0;
}

char *NL(char *string)
{
    char *string2 = string;
    while(*string2)
    {
        if(*string2 == '\n')
            *string2 = '\0';
        string2++;
    }

    return string;
}

输入是 Bitte eingeben wer der Praesident der USA ist: 拜登 Bitte eingeben, wie viele Menschen auf der welt leben: 710 Bitte eingeben wer der Typ ist: Justus(我不能输入,输入在第二个结束)

期望的输出是: Der Name des Praesidenten der USA ist Biden。 Die Anzahl der Menschen die Auf der erde leben, ist 710. Der Name des typen ist。

但我想要的输出是: Der Name des Praesidenten der USA ist Biden。 Die Anzahl der Menschen die Auf der erde leben, ist 710. Der Name des types ist Justus

【问题讨论】:

  • 请给出准确的输入、预期结果和实际结果。

标签: c pointers struct


【解决方案1】:

问题是 scanf 不使用换行符。 我建议您使用 fgets 然后使用 sscanf 或 strtol 来读取一行中的整数。

【讨论】:

    猜你喜欢
    • 2013-12-13
    • 2012-08-24
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多