gpt4 book ai didi

c - 如何正确地将输入扫描到 C 中的结构中并将其显示出来?

转载 作者:太空宇宙 更新时间:2023-11-04 01:23:15 28 4
gpt4 key购买 nike

所以我有一个名为 person 的结构,其中包含他们的所有信息,我希望用户能够输入它们,然后将其全部显示给用户。这是我所拥有的:

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

struct person{
char name[30];
char address[30];
int phoneNumber[30];
char creditRating[30];
};

int main(){
struct person p;
printf("What is the person's name?\n");
scanf(" %s", p.name);
printf("What is the person's address?\n");
scanf(" %s", p.address);
printf("What is the person's phone number?\n");
scanf("%d", &p.phoneNumber);
printf("What is the person's credit rating?\n");
scanf(" %s", p.creditRating);

printf("The person's name is %s\n", p.name);
printf("The person's address is %s\n", p.address);
printf("The person's phone number is %d\n", p.phoneNumber);
printf("The person's credit rating is %s\n", p.creditRating);
return 0;
}

我的问题是它无法正确接收包含空格和数字的地址。另外,当我输入电话号码时,它无法正确显示。所有的数字都是随机的。我该如何解决这个问题?

最佳答案

一个人的电话号码通常有 11 位左右,并且不能保证 intunsigned long long 足够大以容纳它。所以我认为你的 struct person 应该定义为

struct person {
char name[30];
char address[30];
char phoneNumber[20];
char creditRating[10];
};

scanf("%s", str) 在遇到空格时停止,这可能是一个错误,因为人们的名字中通常有一个或多个空格。要输入包含 ' ' 的字符串,请使用 fgets(str, sizeof str, stdin)

此外,scanf() 存在缓冲区溢出漏洞,因此如果用户输入太长而无法保存在指定数组中,您的程序可能会崩溃。 fgets() 为您提供缓冲区溢出保护。如果您使用fgets().


这是一个演示代码:

printf("What is the person's name?\n");
fgets(p.name, sizeof p.name, stdin);
p.name[strcspn(p.name, "\n")] = '\0';

printf("The person's name is %s\n", p.name);

关于c - 如何正确地将输入扫描到 C 中的结构中并将其显示出来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36560285/

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