为啥我的输入功能无法正确输入? [关闭]

Posted

技术标签:

【中文标题】为啥我的输入功能无法正确输入? [关闭]【英文标题】:Why does my input function doesn't get input correctly? [closed]为什么我的输入功能无法正确输入? [关闭] 【发布时间】:2020-09-19 13:28:44 【问题描述】:

我是 C 新手。我之前问过这个问题,我知道我的代码中有一个错误,但仍然无法正常工作。 我想从用户那里获取输入并将其存储在分配的内存中。 ptrsptr 和 patientsnum 是全局变量。 ptrsptr 指向另一个分配的内存,该内存存储指向患者数据的指针。

  char name[51];
  int age=0;
  char agestr[3];
  char infectiondate [11];
  char address[51];
  char *patientptr;
  char **newptr;

  printf("\nEnter the patient name (50 characters at maximum): ");
  scanf ("%50s", name);

  newptr = (char**) realloc(ptrsptr, patientsnum*sizeof(char *));
  if (newptr) ptrsptr = newptr;
  else
  
    patientsnum --;
    printf ("Not enough memory.\n");
    return;
  

  patientptr = (char*) calloc (118, sizeof (char)); // allocation after being sure patient doesn't exist
  if (!patientptr)
  
    patientsnum --;
    printf ("Not enough memory.\n");
    return;
  

  strcpy(patientptr, name);

  printf("Enter the patient age: ");
  scanf ("%d", &age);
  sprintf (agestr, "%2d", age);
  strcpy((patientptr + 51),agestr);

  printf("Enter the patient date of infection (in form of dd/mm/year): ");
  scanf ("%10d", infectiondate);
  strcpy((patientptr + 54),infectiondate);

  printf("Enter the patient address (50 characters at maximum): ");
  scanf ("%50s", address);
  strcpy((patientptr + 65),address);

  *(ptrsptr+patientsnum-1) = patientptr;

  printf ("\nPatient added succesfully.\n");

输出是:

Enter the patient name (50 characters at maximum): John
Enter the patient age: 20
Enter the patient date of infection (in form of dd/mm/year): 20/10/2019
Enter the patient address (50 characters at maximum):
Patient added succesfully.

我无法输入地址。怎么了?

【问题讨论】:

请提供minimal reproducible example。 忽略scanf()的返回值,后果自负。 使用 scanf 很棘手。从最后一个数字开始,您可能在输入中等待“返回”,这会杀死您的地址。 sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html 建议:始终使用fgets() 进行用户输入 建议:将编译器的警告级别设置为尽可能高,并注意警告!! 【参考方案1】:

嗯,看来我还是个初学者,对scanf了解不多。但是,看起来错误是将一些整数放入 char 字符串中。

【讨论】:

以上是关于为啥我的输入功能无法正确输入? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们必须输入 vim ~/.vimrc 而为啥不只输入 vim ~.vimrc? [关闭]

为啥很少有人输入 const 正确的代码? const 正确的代码会编译得更好/更快吗? [关闭]

为啥 Robot Framework、Selenium2Library、Element Text Should Be 关键字无法正确验证输入元素文本?

无法弄清楚为啥我的提交按钮不会提交

为啥我的Visual Studio 2008专业版无法输入序列号激活

为啥我的数据无法插入数据库? [关闭]