您遇到了一系列问题。第一个如果你正在阅读fgets(s,2,stdin);
,你会得到最大1
字符s
加上最后字符。如果你拿c=(int)s[1];
你正在阅读s
的第二个字符到c
。的s
第二字符将总是是要么'\n'
(0xa
进制,十进制10
)如果输入1个字符或0
(所述NUL终止炭)。
您碰到您的下一个问题ch[3]+=c;
。其结果必须属于可打印的字符范围内。 (见:asciitable.com)。这意味着如果ch
包含AAAA
,则s
的第一个字符必须具有61
或更小的ASCII值才能保留在可打印字符范围内。
看看下面的例子:
#include <stdio.h>
int main (void) {
char ch[10] = "",
s[3] = "";
int c = 0;
printf (" first input : ");
fgets (ch, 10, stdin);
printf (" second input: ");
fgets (s, 3, stdin);
printf ("\n you entered:\n first : %s second: %s\n", ch, s);
c = s[0];
ch[3] += c;
printf(" s[1] : %c\n",s[0]);
printf(" ch : %s\n",ch);
return 0;
}
示例使用
$ /bin/fgetsbasic
first input : HAHA
second input: !
you entered:
first : HAHA
second: !
s[1] : !
ch : HAHb
任何ASCII值比61
较大将导致你与非打印填写的ch
第4个字元值。 (这取决于ch
原来的第4个字符的变化)
请格式化您的代码。 –
输入是什么? –
你期望输出什么? –