1.
在字母读取操作中通常会使用到这条语句
while ((c = getchar() ) != EOF)
在做练习时,没有注意括号的重要性,写成
while (c = getchar() != EOF)
结果使得putchar(c)是乱码。
分析:
返回的bool值虽然也是1没错,但是c取得的值却是乱码。鉴于语句里面只有两个判断符号
猜测是符号优先级导致了乱码?
推测c被赋予的值是int 1。但是作为char输出时,是乱码。不应该当会当作ACSII码来处理吗?
还有就是没有理解一次性调用的基本原理,就是设定一个进入条件,执行时改变他:
if ((c == ' ') || (c == t) )
if (flag == 0)
{
...
flag = 1;
}
2.
char s[] = {123,456};//编译错误!
char s[] = {1,4}; //通过编译,输出s内容是乱码!!
char 数组不能那样存?
但是使用 c = getchar(); 之后,即是c存的是数字,但是也是char类型。
可以有 s [i] = c; ,同时输出也是正确值(键盘输入123,s元素也是123);
执行时产生了Segmentation fault (core dumped)错误,由于数组操作为主,初定是数组越界导致。
在字母读取操作中通常会使用到这条语句
while ((c = getchar() ) != EOF)
在做练习时,没有注意括号的重要性,写成
while (c = getchar() != EOF)
结果使得putchar(c)是乱码。
分析:
返回的bool值虽然也是1没错,但是c取得的值却是乱码。鉴于语句里面只有两个判断符号
猜测是符号优先级导致了乱码?
推测c被赋予的值是int 1。但是作为char输出时,是乱码。不应该当会当作ACSII码来处理吗?
if ((c == ' ') || (c == t) )
if (flag == 0)
{
}
2.
char
char s[] = {1,4};
char 数组不能那样存?
但是使用 c = getchar(); 之后,即是c存的是数字,但是也是char类型。
可以有 s [i] = c; ,同时输出也是正确值(键盘输入123,s元素也是123);
执行时产生了Segmentation fault (core dumped)错误,由于数组操作为主,初定是数组越界导致。
没错就是数组越界造成的!对于数组s[10],实际范围是s[0]~s[9]!千万别往s[10]里面存东西,我就存了#!#!#!#!还好只是存了结束符'