C 数组错误,跳过一些元素


int main(int argc, char *argv[])
{
  int length,i,j;
  char *key;
  printf("nnn   What is the length of key?n");
  scanf("%d",&length);
  key=(char*)malloc (length*sizeof(char));
  for(i=0;i<length;i++)
  {
                      printf("n Enter  %d. character ...n",i+1);
                      scanf("%c",&key[i]);
 }
 getch();
  system("PAUSE");
  return 0;
}

当我执行时,它要求

输入 1.字符输入 2。字符输入这里输入 3.字符输入 4.字符

就是这样,它不问奇怪的。不仅是奇数,例如长度为 7,它要求 4 个字符,然后是 3 个字符。为什么会这样?

%c转换说明符不会跳过前导空格字符,因此它会从上一个条目中选择仍在输入流中的换行符。 IOW,假设您键入的长度为 10。 然后,输入流包含字符"1"。"0"和""。 第一个scanf("%d", &length)调用使用"1"和"0",但在输入流中保留""。 因此,第一个scanf("%c", &key[i])读取""字符,而不是您输入的字符。

解决此问题的方法是在格式字符串中%c转换说明符之前添加一个空格:scanf(" %c", &key[i]) 。 这将告诉scanf跳过任何学习空格并将第一个非空格字符读入key[i]

原因是 %c 认为回车键也作为输入

分配内存而不是逐个读取字符后,只需使用 scanf("%s", key) 将其读取为字符串,或者如果您仍然想逐个字符读取字符,请在 scanf 语句中更改 %d 而不是 %c 这将起作用,只有 %c 到 %d 没有别的

相关内容

  • 没有找到相关文章

最新更新