关于C语言的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C语言的问题相关的知识,希望对你有一定的参考价值。
printf("%d\n",strlen("\t\"\065\xff\n"));
我知道答案是:5.但是不知道为什么,请哪位C语言高手指点一下.谢谢!
那么他们分别占几个字节呢,并且\065,\xff换成十进制的分别又是几呢?
\t
\"
\n
就已经站用3个字节
\O 代表无符号8进制数 他不站位 后面跟的65 转2进制为110101 不满8位按8位计 也就是站一个字节 转换为10进制为53 这里指的是无符号
\x 代表无符号16进制数 他不站位 后面跟ff 转2进制为11111111 正好8位 站一个字节 转10进制为255 这里指的是无符号
所以一共站5位 参考技术A 实际上就是求字符串 \t\"\065\xff\n 的字符数量,不算最后的\0结束符.
\t是制表符,\"是",\065是一个8进制数,\xff是一个16进制数,\n是换行,虽然他们的转义意义不一样,但是他们按字符算时都是ASCII码的一种表示,所以共占5个字节. 参考技术B 有5个逃逸字元
\t 水平制表符Tab
\" 双引号
\065 以8进制表示的5
\xff 以16进制表示的无名字符。打印出来显示为占两个字符位的空格
\n 换行符
关于c语言循环与布尔运算的问题
#include <stdio.h>
int main(void)
long num;
long sum = 0L;
_Bool input_is_good;
printf("Please enter an integer to be summed ");
printf("(q to quit): ");
input_is_good = (scanf_s("%ld", &num) == 1);
getchar();
while (input_is_good)
sum = sum + num;
printf("Please enter next integer (q to quit): ");
input_is_good = (scanf_s("%ld", &num) == 1);
getchar();
printf("Those integers sum to %ld", sum);
getchar();
return 0;
为什么这个代码不论输入1还是0还是2等整数,都无法跳出循环?
而用下面的这个,可以正常运行。
#include <stdio.h>
int main(void)
long num;
long sum = 0L;
_Bool input_is_good;
printf("Please enter an integer to be summed ");
printf("(q to quit): ");
scanf_s("%ld", &num);
getchar();
input_is_good = num == 1;
while (input_is_good)
sum = sum + num;
printf("Please enter next integer (q to quit): ");
scanf_s("%ld", &num);
getchar();
input_is_good = num == 1;
printf("Those integers sum to %ld", sum);
getchar();
return 0;
P.S. 我用的是vs2017
还有为什么输入字母就能结束循环?
input_is_good = (scanf_s("%ld", &num) == 1);
只要scanf_s完成一次成功的整形输入,input_is_good就为true
MSDN对scanf_s返回值的解释:
Returns the number of fields successfully converted and assigned; the return
value does not include fields that were read but not assigned. A return value of
0 indicates that no fields were assigned.也就是只有一个变量都没有赋值就才会返回0,只有这种情况才会使得input_is_good 为假
那为什么第一种不论输什么数字都在循环里,而第二种输入非1的数字就能跳出循环,这两种不应该本质上是一样的吗?
追答仔细读我的回答,您会发现本质差很多。我的回答对于您的这个问题来说已经足够到位了,当然,如果您对我的回答的理解有问题的话请务必留言。不一定能马上解答,但是一定会回答的。
追问为什么 input_is_good = (scanf_s("%ld", &num) == 1); 读取scanf的返回值,
而 scanf_s("%ld", &num);
getchar();
input_is_good = num == 1; 读取的就是输入的参数。
十分感谢!
如图
以上是关于关于C语言的问题的主要内容,如果未能解决你的问题,请参考以下文章