我有一段程序,请指教。

来源:百度知道 编辑:UC知道 时间:2024/05/17 05:46:05
#include "stdio.h"
#include "string.h"
main()
{
int i=0,j;
char a[30]="hgirhyqioeh^Zdfjrihg";
for(;i<30;i++)
{
if(a[i]==EOF)
{
break;
j=i;
}
}
for(i=0;i<j;i++)
printf("%c",a[i]);
}

我想让程序在出现EOF的时候,把之前的值输出来,结果是出现了大量乱码,不知道错在哪里了。
当我把EOF换成“r”时,结果还是乱码,语法又没报错,程序执行应该也不大,那编程错在哪里了呢?

EOF 值,内定义为 -1
字符串结束符 '\0' 值为0
也常写作NULL 逻辑上也可以理解为"假"
if(a[i]==EOF) 是错误的
可以改为:
if(!a[i])
if(a[i]==NULL)
if(a[i]=='\0')
if(a[i]==0)
以上四种都可以

首先,这段代码是错误的:

if(a[i]==EOF)
{
break;
j=i;
}

应该先做 j=i;然后再 break;

其次,就是字符串以'\0'结束,不是 EOF, 所以上面的代码应该这样写:

if(a[i]=='\0')
{
j=i;
break;
}

我改了点东西 运行结果应该没问题啦:

#include "stdio.h"
#include "string.h"
void main()
{
int i,j;
char a[30]="hgirhyqioeh^Zdfjrihg";
for(i=0;i<30;i++)
{

if(a[i]=='y')
{
j=i; //如果 j=i; 放在break;后面毫无意义!! break 的意思是退出 整个for 循环!
break;

}

}
for(i=0;i<j;i++)
printf("%c",a[i]);
printf("\n");
}

#include "stdio.h"