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



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

#include<stdio.h>
#include<string.h>
int main(void){

char name[26];
int day, year,cellPhone;

scanf("%s", name);
scanf("%s %d %d", name, &day, &year);
scanf("%d", &cellPhone);

printf("Name:%sn", name);
printf("DOB:%s %d %dn", name,day,year);
printf("Mobile:%d",cellPhone );
}

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

首先,您可能应该在每个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: %sn", name);
printf("DOB: %s %d %dn", month,day,year);
printf("Mobile: %s",cellPhone );
return 0;
}

对代码的一些建议:

  1. 您应该使用char[]来存储电话号码
  2. 使用fgets()而不是scanf输入字符串。如果你想使用scanf,那么就这样使用它:scanf("%26s", name)
  3. 在DOB输入的第二个scanf语句中,您正在执行scanf("%s %d %d", name, &day, &year)。也许你错过了出生日期的月份元素?您已经将名称作为输入,因此它将覆盖旧值

这是您代码的一个稍微修改过的版本:

char name[26], cellPhone[10];
int day, month, year;
fgets(name, 26, stdin);
fgets(cellPhone, 10, stdin);
scanf("%d %d %d", &day, &month, &year);
printf("%s", name);
printf("DOB:%d %d %dn",day, month, year);
printf("Mobile:%s",cellPhone);

当我运行它时,我似乎得到了想要的输出:

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

最新更新