C 按用户打印基本详细信息的程序。输出中不断出现错误

C 按用户打印基本详细信息的程序。输出中不断出现错误,c,C,所以我试图创建一个程序,允许用户输入他们的姓名、DOB和电话号码,然后将它们作为printf语句一起列出。我注意到,每次我运行这个程序时,它都不会打印我的名字,而是用我的出生月份来替换,电话号码会以随机乱码的形式弹出。知道我做错了什么吗??先谢谢你 #包括 #包括 内部主(空){ 字符名[26]; 国际日、年、手机; scanf(“%s”,名称); scanf(“%s%d%d”,名称、日期和年份); scanf(“%d”和手机); printf(“名称:%s\n”,名称); printf(“出生

所以我试图创建一个程序,允许用户输入他们的姓名、DOB和电话号码,然后将它们作为printf语句一起列出。我注意到,每次我运行这个程序时,它都不会打印我的名字,而是用我的出生月份来替换,电话号码会以随机乱码的形式弹出。知道我做错了什么吗??先谢谢你

#包括
#包括
内部主(空){
字符名[26];
国际日、年、手机;
scanf(“%s”,名称);
scanf(“%s%d%d”,名称、日期和年份);
scanf(“%d”和手机);
printf(“名称:%s\n”,名称);
printf(“出生日期:%s%d%d\n”,姓名、日期、年份);
printf(“手机:%d”,手机);
}

您的代码有一些错误,但它们很容易修复

首先,您可能应该在每个
scanf
之前有
printf
语句,以便用户知道输入什么

第二,你为什么要用这个名字两次?您需要为月份名称声明另一个变量。这就是为什么它把你的名字印成出生月份。您可以选择字符串格式还是数字格式

最后,你对电话号码胡言乱语的原因很可能是因为你输入的号码太大了,不能用双人号码。您可以使用某种类型的无符号int或只使用字符串,在本例中,这可能更适合于输入

这是我对你的代码的建议

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

int main(void) {

    char name[32];
    char cellPhone[32];
    char month[32];
    int day, year;

    printf("Please enter your name: ");
    scanf("%s", name);
    printf("Please enter your DOB (Month ## ####): ");
    scanf("%s %d %d", month, &day, &year);
    printf("Please enter your cell number: ");
    scanf("%s", cellPhone);
  
    printf("Name: %s\n", name);
    printf("DOB: %s %d %d\n", month,day,year);
    printf("Mobile: %s",cellPhone );

    return 0;

}
#包括
#包括
内部主(空){
字符名[32];
手机字符[32];
半个月[32];
国际日,年;
printf(“请输入您的姓名:”);
scanf(“%s”,名称);
printf(“请输入您的出生日期(月):”;
scanf(“%s%d%d”,月、日、年);
printf(“请输入您的手机号码:”);
scanf(“%s”,手机);
printf(“名称:%s\n”,名称);
printf(“日期:%s%d%d\n”,月、日、年);
printf(“手机:%s”,手机);
返回0;
}

对您的代码有几点建议:

  • 您应该使用用户
    char[]
    来存储电话号码
  • 使用
    fgets()
    输入字符串,而不是
    scanf
    。如果您不想使用scanf,请这样使用它:
    scanf(“%26s”,name)
  • 在DOB输入的第二个scanf语句中,您正在执行的
    scanf(“%s%d%d”、名称、日期和年份)
    。也许你缺少了DOB的月份元素?您已经将名称作为输入,所以它将覆盖旧值
  • 下面是您的代码的一个稍加修改的版本:

    char name[26],手机[10];
    整数日、月、年;
    fgets(姓名,26,标准名称);
    fgets(手机,10,标准输入);
    scanf(“%d%d%d”、&day、&month、&year);
    printf(“%s”,名称);
    printf(“日期:%d%d%d\n”,日、月、年);
    printf(“手机:%s”,手机);
    
    当我运行它时,我似乎得到了期望的输出:

    [rohaan@localhost c-posts]$ ./a.out 
    Rohan Kumar
    +92334312
    23 10 1994
    Rohan Kumar
    DOB:23 10 1994
    Mobile:+92334312
    

    scanf(“%s”,名称);scanf(“%s%d%d”,name,
    )-为什么要读取两次名称?
    int
    不是存储电话号码的合适数据类型。电话号码本质上是字符序列,而不是实数。