user-0 提问: C语言，不使用全局变量将文本分散对齐的问题

回复:
user: user-1
content: 请牢记：源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要，重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。  意思是你程序结构看上去再合理，再简洁，也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错，更方便修改，出错了更容易找到哪里出错和具体出错的原因，更容易改正错误。  试对比 图书馆（对图书的分类够结构化了吧） 和 搜索引擎（可看作是扁平化任何结构数据，仅支持全文检索） 哪个处理信息更方便、更高效。  所以 与其费劲去重构代码让其看上去更简洁、更合理 不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。  结构越复杂，越难修改，越难除错。 有时（甚至大多数时候），看上去越合理、越简洁的代码，运行起来性能越差，出错时查找原因越难，找到出错原因后改正越费劲。  程序员要做的不是尽力避免错误，而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误，“快速的失败”远胜过“预防错误”。Fred George  前微软C#编辑器的开发主管Jay Bazuzi列出的一些有助于找到正确方向的问题；他觉得前同事们应该用这些问题来问自己；实际上不管在哪里工作的开发者们都应该经常问问自己这些问题： ◆“要保证这个问题不会再出现，我该怎么做？” ◆“要想少出些Bug，我该怎么做？” ◆“要保证Bug容易被修复，我该怎么做？” ◆“要保持对变化的快速响应，我该怎么做？” ◆“要保证我的软件的运行速度，我该怎么做？” 如果大多数团队都能不时问一下自己，必定会从中得益，因为这些都是真正强而有力的问题。

user: user-0
content: 引用 4 楼 赵4老师 的回复:用全局变量不会死人的。 题目考的就是只用局部变量，快吐了，做了4天了

user: user-1
content: 用全局变量不会死人的。

user: user-0
content: 楼上这是使用了全局的。。。虽然错了

user: user-0
content: #include <stdio.h> #include <string.h> char words[45],temp[45],spec[100]; int count,len,word,spe,extra; void counts(); void justify();  int main(){ 	printf("Enter a line of text:"); 	gets(temp);//- read that reads in one line of text of not more than 45 characters (that is, reads until input is valid) 	count=0; 	len=strlen(temp); 	counts(); 	justify(); 	printf("123456789012345678901234567890123456789012345\n"); 	printf("%s",words); }  void counts(){//- count that counts and returns the number of gaps between words in one line of text 	int i; 	for(i=0;i<len;i++){ 		if(temp[i]==' '){ 			count++; 		} 		else {word++; 		} 	} 	spe=(45-word)/count; 	extra=(45-word)-(spe*count); }  void 	justify(){//- justify that prints out character by character in justified form, one line of text (see sample output below) 	int i,j,k; 	j=0; 	for(i=0;i<len;i++){ 		if(temp[i]!=' '){ 			words[j]=temp[i]; 			j++; 		}else{ 			for(k=0;k<spe;k++){ 				words[j]=' '; 				j++; 			} 			if(extra>0){ 				words[j]=' '; 				j++; 				extra--; 			} 		} 	} }

user: user-0
content: 这个是老师给的思路图，但是这里的read实在是想不通是什么意思

user: user-0
content: 引用 7 楼 Yang_Yida 的回复:[quote=引用 6 楼 赵4老师 的回复:] 悄悄告诉你，局部静态变量和全局变量很像。 意思是const char这样？ char line[45]； line=const char read（）；//或者是strcpy（line，read（））？ const char read（）{  printf("Enter a line of text:");  return "%s";//。。。能这样吗？ }[/quote] #include<stdio.h> #include<string.h> #include<stdbool.h> const char* read(); int count(char* t); void justify(int g,char* str);  int main(){ 	int k; 	for(k=0;k<3;k++){ 		if(k!=0){ 			printf("\n"); 		} 		char line[45]={0}; 		strcpy(line,read()); 		printf("123456789012345678901234567890123456789012345\n"); 		int gaps; 		gaps=count(line); 		justify(gaps,line); 	} }  const char* read(){ 	char temp[45]={0}; 	char* bk; 	printf("Enter a line of text:"); 	gets(temp); 	bk=temp; 	return bk; }  int count(char* t){ 	int i,len,spe,word,counts; 	spe=0; 	word=0; 	counts=0; 	len=strlen(t); 	for(i=0;i<len;i++){ 		if(t[i]==' '){ 			counts++; 		} 		else {word++; 		} 	} 	spe=(45-word)/counts; 	return spe; }  void justify(int g,char* str){ 	int i,k,j,count,extra,word,len;   	count=0;extra=0;word=0; 	char temp[45]={0}; 	len=strlen(str); 	for(k=0;k<len;k++){ 		if(str[k]==' '){ 			count++; 		}else{ 			word++; 		} 	} 	extra=(45-word)-(g*count); 	i=0; 	for(k=0;k<len;k++){ 		if(str[k]==' '){ 			j=0; 			while(j<g){ 				temp[i]=' '; 				j++; 				i++; 			} 			if(extra>0){ 				temp[i]=' '; 				i++; 				extra--; 			} 		}else{ 			temp[i]=str[k]; 			i++; 		} 	} 	temp[45]='\0'; 	for(k=0;k<i;k++){ 		putchar(temp[k]); 	} }    //真的是爆肝。。。终于做完了，有需要的朋友可以看看

user: user-0
content: 引用 6 楼 赵4老师 的回复:悄悄告诉你，局部静态变量和全局变量很像。 意思是const char这样？ char line[45]； line=const char read（）；//或者是strcpy（line，read（））？ const char read（）{  printf("Enter a line of text:");  return "%s";//。。。能这样吗？ }

user: user-1
content: 悄悄告诉你，局部静态变量和全局变量很像。