以下C代码有什么问题? (更新)
int nfds = 0;
char c[2] = " ";
char ans[2] = " ";
printf("Test p or s [p,s]: p? ");
ans[0] = (char)getchar();
if (ans[0] != '\n')
{
ans[1] = '\0';
printf("ans = %s\n", ans);
}
else
ans[0] = '\0';
/* FIXME: answering 's' -> nfds is never read */
printf ("Choose [0, 1, 2, 3]: 0? ");
c[0] = (char)getchar();
if (c[0] != '\n')
{
c[1] = '\0';
nfds = strtol(c, NULL, 10);
}
else
c[0] = '\0'
printf( "nfds=%d\n", nfds);
回答“返回”是有效的,但回答“s + return”并不会停止打印(“选择...”)并继续,好像已经给出“返回”一样?
也许更好的解决方案是:首先读取ans
中的字符/字符串,默认值:{/ 1}}在char / string ='s'/“s”中请求下一个问题读取整数{ {1}},默认:"return"
答案 0 :(得分:4)
首先:
c[2] = '\n';
两个元素的数组中没有c[2]
。与ans
相同。
第二
c[1] = getchar();
...
nfds = atoi(c);
您的数组有两个元素,字符串必须以null结尾。通过覆盖c[1]
,c
数组不能保存字符串。
另请注意,getchar
会返回int
而不是char
,如果您必须将其返回值与EOF
进行比较,这一点非常重要。
答案 1 :(得分:1)
基于ouah所说的getchar()返回一个int值,该值将是按下的任何键的decimal值。因此,您应该将用户键击作为int捕获,然后将typecast作为char捕获并将其插入到char数组中。
int key_stroke;
char array[size]
key_stroke = getchar();
array[1] = (char)key_stroke;
如果我错了,请纠正我,但是你试图处理击键直到按下回车键?使用以下代码可以更简单,更干净地完成。
int key_stroke;
char array[size]
for(i = 0; ((char)key_stroke != '\n') && (i < size); i++)
{
key_stroke = getchar();
array[i] = (char)key_stroke;
}
用户按下的键将被添加到array [],直到按下回车键或直到阵列空间不足为止。 'i'会随着每次旋转而增加,因此您的索引会自动更新。