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个字符。为什么会这样?
答案 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没有别的