全部问题 > 当前问题

i=0不就是使得S[0]=0了吗?那岂不是一开始就不会进入for循环?所以答案不是A吗

Q雅 2015-9-18 20:22:20

共 2 个回答

最佳答案

lucas 2015-9-18 20:25:55

char s[]="012xy..."  这个是字符串数组, s[0]=0 ,这个 0是 字符0,0的Ascll码是48.

s[i]!=0 是判断 s[i]的Ascall码是否为0.   字符串存入数组时结尾为\0  \0的Ascll为0.

所以s[i]!=0是判断字符串是否循环结束。

沙沙 2015-9-18 20:26:19

题中说的 if(s[i]>='0'&&s[i]<='9') 是字符‘0’ for(i=0;s[i]!=0;i++)中s[i]!=0中0是结束标志‘\0’,这两个不是一个概念。

问题来自: 字符串
有以下程序
#include <stdio.h>
main()
{ char s[]="012xy\08s34f4w2";
  int i,n=0;
  for(i=0;s[i]!=0;i++)
    if(s[i]>='0'&&s[i]<='9') n++;
  printf("%d\n",n);
}
程序运行后的输出结果是 ______ 。
A. 0
B. 3
C. 7
D. 8
答案:B
解析:字符串s由于中间有一个'\0',所以for循环实际只遍历了012xy。如果这里面的字符是数字,则n++,012是数字,因此n=3。注意:i=0的时候,s【i】是‘0’,是字符零,它的ascll码是48,并不是数字零,所以并不会跳出循环,而‘\0'的ascll码是数字零,这个时候while才会跳出循环,因此选B。