关于一个函数进入循环后无法出来
#include
#include
#include
#include
void fun (char *str)
{
int t,i;
for(t=0;str[t]!='\0';)
{
if(str[t]==' ')
{
for(i=t;str[i]!='/0';i++)
str[i]=str[i+1];
}
if(str[t]!=' ')
t++;
}
}
void main()
{
char str[81];
char Msg[]="Input a string:";
int n;
FILE out;
printf(Msg);
gets(str);
puts(str);
fun(str);
printf("** str: %s\n",str);
//
out=fopen("out.dat","w");
fun(Msg);
fprintf(out,"%s",Msg);
fclose(out);
//
}
期望达到以下效果
str[i]!='/0'
改为
str[i]!='\0'
你写成'/0',找不到这个字符,就死循环了
void fun (char *str)
{
int t,i;
for(t=0;str[i]!='\0';t++)
{
if(str[t]==' ')
{
str[i]=str[i+1];
}
if(str[t]!=' ')
t++;
}
}
把fun函数里面的for循环判断字符串结束那里改一下就可以了,str[i]!='/0';改为str[i]!='\0'; 因为空字符串是'\0'。修改如下:
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>
void fun (char *str)
{
int t,i;
for(t=0;str[t]!='\0';)
{
if(str[t]==' ')
{
for(i=t;str[i]!='\0';i++)
str[i]=str[i+1];
}
if(str[t]!=' ')
t++;
}
}
int main()
{
char str[81];
char Msg[]="Input a string:";
int n;
FILE * out;
printf(Msg);
gets(str);
puts(str);
fun(str);
printf("** str: %s\n",str);
//
out=fopen("out.dat","w");
fun(Msg);
fprintf(out,"%s",Msg);
fclose(out);
return 0;
//
}
修改如下,供参考:
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>
void fun(char* str)
{
int t, i;
for (t = 0, i = 0; str[t] != '\0'; t++)
{
if (str[t] != ' ')
{
str[i++] = str[t];
//for (i = t; str[i] != '/0'; i++)
// str[i] = str[i + 1];
}
//if (str[t] != ' ')
//t++;
}
str[i] = '\0';
}
void main()
{
char str[81];
char Msg[] = "Input a string:";
int n;
FILE* out;
printf(Msg);
gets(str);
puts(str);
fun(str);
printf("** str: %s\n", str);
//
out = fopen("out.dat", "w");
fun(Msg);
fprintf(out, "%s", Msg);
fclose(out);
//
}
#include <stdio.h>
#pragma warning(disable:4996)
void func(char* str) {
int i=0,j=0;
while (str[j] != '\0') {
if (str[j] == ' ')
{
j++;
}
else {
str[i]=str[j];
i++;
j++;
}
}
str[i]='\0';
}
int main()
{
char ccc[]="hao da yi ke shu";
func(ccc);
printf("%s",ccc);
}