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

时间:2013-10-25 16:57:01

标签: c arrays malloc skip

int main(int argc, char *argv[])

{

  int length,i,j;

  char *key;

  printf("\n\n\n   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.character 输入2.字符 inputhere 输入3.char 输入4.char

就是这样,它不会问奇数。不只是奇数,如果例如长度是7,它会询问4然后是3个字符。为什么会这样?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

原因是%c认为输入键也是输入

一旦你分配内存而不是通过char读取char,只需使用scanf(“%s”,key)将其读取为字符串,或者如果你仍想通过char更改%d而不是%c来读取char scanf语句将起作用,只有%c到%d没有别的