字符串判断什么时候用‘\0’ 什么时候用'\n'
字符串判断什么时候用 ‘\0’什么时候用 '\n'字符串是‘\0’和'\n'同时都有吗?有先后顺序吗?
while(scanf("%c",&s1),s1!='\n')
为什么这个是用 '\n' 不可以是 '\0'
我是以字符串一样的形式如 abcdef 这样输入的
for(i=0,j=0;p1!='\0';i++)
而这个则是' \0' while(scanf("%c",&s1),s1!='\n')//你输入一个字符串肯定是打回车符'\n'给电脑知道你输入完毕了,而'\0'是电脑
自动添加在字符串后面的一个结束标识符。
for(i=0,j=0;p1!='\0';i++) //这个是遍历字符串中的字符,直到遇到结束符'\0'才跳出循环 本帖最后由 jackz007 于 2019-12-7 17:38 编辑
'\0' 是法定的字符串结束标志,任何一个字符串的最后那个字符一定是 '\0',就是说,字符串尾部的 '\0' 是判断字符串结束的唯一标志。至于 '\n' 没有什么特别的,和一个普通字符并无任何区别,其位置既可以出现在字符串的开头,也可以出现在中间,当然也可以出现在尾部,其作用不过就是在显示字符串的时候,可以呈现出回车换行的效果。当然,如果是文本文件的话,其每一行内容的最后,都一定带有一个换行符 '\n',这也是分割文本文件的重要标志。当用 fgets() 函数从文本文件读出的时候,每个文本行的末尾字符也一定是 '\n'。当然,字符串结束标志肯定位于 '\n' 之后,否则的话,还怎么叫 "结束标志" 呢! while(scanf("%c",&s1),s1!='\n')
这行代码是什么意思?当输入不是换行键就一直运行下去吗?
{:9_241:} 北走、 发表于 2019-12-7 16:03
while(scanf("%c",&s1),s1!='\n')
这行代码是什么意思?当输入不是换行键就一直运行下去吗?
就是意思当你输入('\n')换行时表明你输入结束!!这时c语言会自动帮你加上字符串的结束符“\0” sanguine_boy 发表于 2019-12-7 15:53
while(scanf("%c",&s1),s1!='\n')//你输入一个字符串肯定是打回车符'\n'给电脑知道你输入完毕了,而'\0'是 ...
我是以字符串一样的形式如 abcdef 这样输入的不会产生一个'\0'吗 那我是以字符串一样的形式如 abcdef 这样输入的,以 s1!='\0' 判断为什么就不行了?? Aseeker 发表于 2019-12-7 23:15
那我是以字符串一样的形式如 abcdef 这样输入的,以 s1!='\0' 判断为什么就不行了??
输入abcdef后要回车电脑才知道你输入完了,此时才在f后面添加'\0' 本帖最后由 jackz007 于 2019-12-8 12:28 编辑
Aseeker 发表于 2019-12-7 23:15
那我是以字符串一样的形式如 abcdef 这样输入的,以 s1!='\0' 判断为什么就不行了??
char a[] = {"abcdef"} ;
字符串 a 的长度为 6,作为字符数组,a 的总容量却是 7 个字节,因为除了 6 个字符外,还需要 1 个额外的字节空间,用于保存结束标志字符 '\0'。正常的字符串比较,结束标志并不纳入比较范围,如果想判断,表达式 (a == '\0') 的值一定是 true。
字符 '\0' 永远不可能通过键盘输入得到,而是在字符串输入结束的时候,由操作系统附加到字符串末尾的,所以,键盘输入过程中的任何一个字符都不可能是 '\0' ,表达式:
(s1 != '\0')
所表达的条件永远成立。
页:
[1]