gpt4 book ai didi

c - 如何在数组中使用int?

转载 作者:行者123 更新时间:2023-11-30 17:46:39 25 4
gpt4 key购买 nike

我创建了一个非常简单的编码,它没有错误,但是当它运行时,我无法将输入放在“年龄”一侧。

#include <stdio.h>
#include <conio.h>


struct baby
{
char name[2][30];
char sex[2][7];
char birthday[2][12];
};

struct parents
{
char nama[2][30];
int age[2];
};

struct momdad
{
struct parents father;
struct parents mother;
};

struct momdad info;
struct baby newborn;

int main()
{
int i;

for(i=0;i<2;i++)
{
printf("\nEnter baby's name %d: ",i+1);
gets(newborn.name[i]);

printf("Enter baby's sex %d (Female/Male): ",i+1);
gets(newborn.sex[i]);

printf("Enter baby's birthday %d (dd/mm/yyyy): ",i+1);
gets(newborn.birthday[i]);

printf("Enter father's name %d: ",i+1);
gets(info.father.nama[i]);
printf("Enter father's age %d: ",i+1);
gets(info.father.age[i]);

printf("Enter mother's name %d: ",i+1);
gets(info.mother.nama[i]);
printf("Enter mother's age %d: ",i+1);
gets(info.mother.age[i]);



}

printf("\n\n\tNEW BORN BABY IN KUANTAN HOSPITAL");
printf("\n\n===============================================");

for(i=0;i<2;i++)
{


printf("\n\nBaby name: %s",newborn.name[i]);
printf("\nSex: %s",newborn.sex[i]);
printf("\nBirthday: %s",newborn.birthday[i]);
printf("\n\nFather name: %s",info.father.nama[i]);
printf("\nFather age: %s",info.father.age[i]);
printf("\n\nMother name: %s",info.mother.nama[i]);
printf("\nMother age: %s",info.mother.age[i]);
printf("\n\n----------------------------------------------");
}

getch();
}

这是我的声明,我认为这是错误的,但我不知道如何。

int age[2];

输入内容将放在这里

printf("Enter father's age %d: ",i+1);
gets(info.father.age[i]);

在这里

printf("Enter mother's age %d: ",i+1);
gets(info.mother.age[i]);

我还是编程新手很抱歉问这个简单的问题

最佳答案

切勿使用gets()。它无法安全使用,并且自 2011 年起已从该语言中删除。

在评论中,您提到调用 fflush(stdin);。输入流的 fflush 行为未定义。一些实现定义了行为,但取决于它将使您的程序不可移植 - 而且您无论如何都不需要它。

读取输入数据的最简单方法是使用 scanf(),但这有一些其自身的问题。例如,如果您使用 scanf("%d", &n); 并输入 123,它将消耗 123 并留下后面的任何内容它(例如换行符)等待被读取。

读取输入的更好方法是使用 fgets 读取一行文本,然后使用 sscanf 解析输入行中的数据。它重新

这是一个例子:

#define MAX_LEN 200
char line[MAX_LEN];
int num;

printf("Enter an integer: ");
fflush(stdout);

if (fgets(line, MAX_LEN, stdin) == NULL) {
fprintf(stderr, "Error reading line\n");
exit(EXIT_FAILURE);
}
if (sscanf(line, "%d", &num) != 1) {
fprintf(stderr, "Error parsing integer from line\n");
exit(EXIT_FAILURE);
}
printf("The number is %d\n", num);

我在第一个 printf 之后调用 fflush(stdout) 以确保提示实际出现。 stdout 可以是行缓冲的,这意味着在打印整行之前不会出现输出。 fflush 并不总是必要的,但它是一个好主意。

fgets 调用会读取整行输入 MAX_LEN 个字符(如果该行比该行长)。 (gets 无法指定最大输入大小,因此无论您的目标数组有多大,它总是可以读取更多内容并破坏随机内存。)fgets 返回一个如果有问题,我会检查空指针。

sscanfscanf 类似,但它从内存中的字符串读取数据,而不是从标准输入读取数据。 (还有 fscanf,它从指定文件中读取。)它返回成功扫描的项目数,因此 1 以外的值将指示错误。

我建议阅读所有这些功能的文档;我没有涵盖他们所做的一切。事实上,您应该阅读您使用的任何标准库函数的文档。

关于c - 如何在数组中使用int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19204958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com