#include <stdio.h>
#include <limits.h>
int main() {
enum loop {NO ,YES};
enum loop okloop = YES;
int i=0;
char s[8];
int lim=6;
char c;
while (okloop==YES)
{
if (i>=lim-1)
okloop=NO;
else if ((c=getchar())!='\n')
okloop=NO;
else if (c==EOF)
okloop=NO;
else {
s[i]=c;
++i;
}
}
for (i=0;i<5;++i)
printf("this is the character %c\n",s[i]);
return 0;
}
我只是从键盘输入一个字符并将其存储在一个数组中;然后我必须将存储在数组中的字符打印到屏幕上,但输出并不像我预期的那样。
答案 0 :(得分:3)
根据我的理解,你需要改变
else if ((c=getchar())!='\n')
到
else if ((c=getchar()) == '\n')
否则,您最终不会在s[i]
中存储任何有效。
另外,作为旁注
return 0;
。main()
s[i]
,以防您以后想要将其用作字符串。 良好做法。
答案 1 :(得分:3)
为什么你不能这样做:
while((c = getchar()) != '\n' && i<lim-1)
s[i++]=c;
您的代码不必要地使用了许多变量,这些变量可以通过上述循环来避免。
[由alk添加]
更多可读版本:
size_t i = 0;
int c = EOF;
...
while (
('\n' != (c = getchar())) &&
(i < lim)
)
{
s[i] = c;
++i;
}
微小的变化使事物更易于阅读,更易于理解,更不容易出错,更稳定。
不太优雅但更明显的解决方案:
size_t i = 0;
...
while (i < lim)
{
int c = getchar();
if ('\n' == c)
{
break;
}
s[i] = c;
++i;
}
答案 2 :(得分:0)
这就是你需要做的所有事情:
#include <stdio.h>
int main()
{
int i=0, j;
char s[8];
char c;
while (i < 8)
{
c = getchar();
if (c == EOF)
break;
else if (c != '\n')
s[i++]=c;
}
for (j = 0; j < i; ++j)
printf("this is the character %c\n",s[j]);
return 0;
}
循环访问用户输入(8 characters max
)。当用户输入EOF (Ctrl + D)
时,while loop
将退出,直到该点输入的任何字符都将作为输出打印。如果给出\n
作为输入,它将被忽略/不保存在数组中。