红豆泥! 2021-06-17 22:39 采纳率: 94.4%
浏览 15
已采纳

大家能帮忙看一下这一步是为什么吗,谢谢

#include<stdio.h>

int main(){
	char a[1000] = {0};
	
	while(gets(a) != NULL){
		int number = 0 ;
		int i = 0;
		for(i = 0; a[i] != 0; i++){
			if((a[i] >= 'A' && a[i] <= 'Z') || ( a[i] >= 'a' && a[i] <= 'z')){
			number++;
			for(; (a[i] != ' ' && a[i] != 0) ; i++){
				;
			}
			}
		
		}
			
	
		printf("%d\n",number);
		
		for(i = 0; a[i] != 0;i++){
			a[i] = 0;
		}
		
	}
	
	return 0;
}

此题为求单词数

for(i = 0; a[i] != 0;i++){
			a[i] = 0;
		}

其中这步我不太明白,为什么要有,如果去掉的话就是Compile Error 麻烦大家了

  • 写回答

2条回答 默认 最新

  • qfl_sdu 2021-06-18 00:06
    关注

    将上一次读取的字符串清空,避免出现上一次的字符串遗留到下一次字符串中,比如:

    第一次读取的字符串是"ABCDEFGHIJKLMN";

    第二次读取的字符串是"123"

    第二次读取的字符串的长度小于第一次的,由于两次读取用了同一块内存,所以第二次读取的时候,内存中的字符串可能就是"123DEFGHIJKLMN",所以通过执行for(i = 0; a[i] != 0;i++){a[i] = 0;}将上一次读取的内容清空是有必要的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图