我使用从第6章(当前程序)中学到的东西解决了这个问题。我最初的想法是使用循环打印并扫描值到数组中,然后打印数组的值,但我无法使其工作(主函数下的注释部分)。该程序只打印换行符(程序打印该字母但我必须按Enter键才能获得下一个字母)。主要功能中程序中的注释部分是我想要做的事情的想法。我在下面列出了该计划,我提前感谢您的帮助。
//This is a program to create an array of 26 elements, store
//26 lowercase letters starting with a, and to print them.
//C Primer Plus Chapter 6 programming exercise 1
#include <stdio.h>
#define SIZE 26
int main(void)
{
char array[SIZE];
char ch;
int index;
printf("Please enter letters a to z.\n");
for(index = 0; index < SIZE; index++)
scanf("%c", &array[index]);
for(index = 0; index < SIZE; index++)
printf("%c", array[index]);
//for(ch = 'a', index = 0; ch < ('a' + SIZE); ch++, index++)
//{ printf("%c", ch);
// scanf("%c", &array[index]);
//}
//for(index = 0; index < SIZE; index++)
// printf("%c", array[index]);
return 0;
}
答案 0 :(得分:2)
这里的问题是
当您输入字符然后按输入时,您输入两个字符。一个是您输入的字母字符,另一个是\n
。这就是为什么你得到你所看到的。解决方案是使用白色空间charcaters ..这是通过将' '
放在scanf
中完成的。
scanf(" %c", &array[index]);
^
为什么会这样?
由空白字符组成的指令由执行 读取输入到第一个非空白字符(仍然是 未读),或直到不再能读取任何字符。指令永远不会 失败。
示例代码:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 6
int main(void)
{
char array[SIZE];
int index;
printf("Please enter letters a to z.\n");
for(index = 0; index < SIZE; index++)
if( scanf(" %c", &array[index]) != 1){
fprintf(stderr,"%s\n","Error in input");
exit(1);
}
else {
printf("read: %c\n",array[index]);
}
for(index = 0; index < SIZE; index++)
printf("%c", array[index]);
putchar('\n');
return 0;
}