Dva*_*asa 4 c string file-io for-loop
所需的for loop开始之后fopen,具体for (i=0;1;i++)到底是什么?什么时候for loop会终止?达到价值后i=1?什么时候会发生?(在互联网和书C中寻找这种类型的循环(如何编程,Deitel和Deitel),没有任何结果......)(代码的目的是将多行转换final.txt为字符串words[i][j];)
int lines_allocated = 1000;
int max_line_len = 150;
double c[42][1000]={0};
int print;
char **words = (char **)malloc(sizeof(char*)*lines_allocated);
if (words==NULL)
{
fprintf(stderr,"Out of memory (1).\n");
exit(1);
}
FILE *fp = fopen("final.txt", "r");
if (fp == NULL)
{
fprintf(stderr,"Error opening file.\n");
exit(2);
}
int i;
for (i=0;1;i++)
{
int j;
if (i >= lines_allocated)
{
int new_size;
new_size = lines_allocated*2;
words = (char **)realloc(words,sizeof(char*)*new_size);
if (words==NULL)
{
fprintf(stderr,"Out of memory.\n");
exit(3);
}
lines_allocated = new_size;
}
words[i] = (char*)malloc(max_line_len);
if (words[i]==NULL)
{
fprintf(stderr,"Out of memory (3).\n");
exit(4);
}
if (fgets(words[i],max_line_len-1,fp)==NULL)
break;
for (j=strlen(words[i])-1;j>=0 && (words[i][j]=='\n' || words[i][j]=='\r');j--)
words[i][j]='\0';
}
Run Code Online (Sandbox Code Playgroud)
因为在C中,a int可以被解释为使用零/非零规则的布尔值(零表示"假",其他任何意思是"真"),循环将继续,直到break在循环体内到达语句.
你可以重写相同的循环
for (i=0; ;i++)
Run Code Online (Sandbox Code Playgroud)
因为在中间没有条件的情况下,循环将一直持续到一个break.
什么
for (i=0;1;i++)确切呢?
for (i=0;1;i++)
Run Code Online (Sandbox Code Playgroud)
是一个无限循环,因为1(非零值)的计算结果true,因此在这种情况下,for将成为条件表达式true.
当for循环终止时?
该声明
if (fgets(words[i],max_line_len-1,fp)==NULL)
break;
Run Code Online (Sandbox Code Playgroud)
将在条件true进入时终止循环if.
达到价值后
i=1?
不,我在上面解释过.
什么时候会发生?
i = 1将在第二次迭代时发生.但这不会终止循环.
| 归档时间: |
|
| 查看次数: |
7020 次 |
| 最近记录: |