C 我在打印字符串时遇到问题

C 我在打印字符串时遇到问题,c,C,我正在用c编写一个程序来删除多余的空格,我已经完成了所有的工作,但是当我编译时,输出中需要的字符串没有出现,我认为问题出在主函数中,我将向您展示我的代码: #include <stdio.h> #include <stdlib.h> void eliminar_espacios(char oracion[100]) { int i; for(i=0;i!='\0';i++) { if(oracion[i]==' ' && (oracion[i+

我正在用c编写一个程序来删除多余的空格,我已经完成了所有的工作,但是当我编译时,输出中需要的字符串没有出现,我认为问题出在主函数中,我将向您展示我的代码:

#include <stdio.h>
#include <stdlib.h>


void eliminar_espacios(char oracion[100]) {
int i;
for(i=0;i!='\0';i++) {
    if(oracion[i]==' ' && (oracion[i+1]==' ' || oracion[i+1]=='\0')) {
        oracion[i]=oracion[i+1];
    }
}
 }

int contar_espacios(char oracion[100])
{
    int i,numero_espacios=0;
    for (i=0;oracion[i]!='\0';i++){
        if (oracion[i]==' '&&oracion[i+1]==' '){
            numero_espacios+=1;
        }
    }
    return(numero_espacios);
}


int main(void){
    char frase[100];
    int num_espacios;
    printf("Escribe aqui a frase:");
    gets (frase);
    num_espacios=contar_espacios(frase);
    eliminar_espacios(frase);
    printf("%s\n",frase);
    printf("%d",num_espacios);
    return 0;
}
#包括
#包括
无效eliminar_espacios(char oracion[100]){
int i;
对于(i=0;i!='\0';i++){
if(oracion[i]=''&(oracion[i+1]=''| | oracion[i+1]='\0')){
oracion[i]=oracion[i+1];
}
}
}
内部控制(char oracion[100])
{
int i,数字=0;
对于(i=0;oracion[i]!='\0';i++){
if(oracion[i]=''&&oracion[i+1]=''){
数字espacios+=1;
}
}
返回(数字);
}
内部主(空){
炭纤维[100];
埃斯帕西奥斯国际俱乐部;
printf(“描述一个frase:”);
得到(磨损);
num_espacios=contar_espacios(frase);
埃利米纳·埃斯帕西奥斯(弗拉斯);
printf(“%s\n”,frase);
printf(“%d”,num_espacios);
返回0;
}

您的eliminar\u espacios函数没有“返回”。 此外,还应使用strcpy或strncopy将新字符串保存在“frase2”中, 例如:

strncpy(frase2, eliminar_espacios(frase), sizeof frase2)
尝试:

编辑:如果您愿意,您可以完全摆脱frase2,只需使用frase调用所有函数,无需strcpy:

eliminar_espacios(frase);
num_espacios=contar_espacios(frase);
printf("%s\n",frase);
Edit2:修复eliminar_espacios()函数:

void eliminar_espacios(char oracion[100]) {
    int i;
    for(i=0;oracion[i]!='\0';i++) {
        if(oracion[i]==' ' && (oracion[i+1]==' ' || oracion[i+1]=='\0')) {
            oracion[i]=oracion[i+1];
        }
    }
}

什么是预期的,什么是不想要的结果?我希望打印一个没有额外空格的字母字符串,不想要的结果是程序什么也不打印我修改了代码,但是现在不是打印没有额外空格的字符串,它只是打印字符串而不做任何修改现在你的代码可以正常工作了吗?第1页。最好是初始化charfrase[100]={0}2。return不是一个函数,它不需要括号。添加return也是一样的。有没有不使用strcpy或strncopy的解决方案?@AndresOtero有没有任何理由您不想使用
strcpy
strncpy
?我不允许使用这些函数eliminar_espacios函数中不需要返回,因为您正在按ref更改外部字符数组。do char'eliminar_espacios(char*oracion)'原型,然后使用frase打印结果calling@AndresOtero到底为什么不允许你使用这些功能?!?谢谢,现在它打印了一些东西!!!但它并没有像我尝试过的eliminar_espaciosI那样的功能,但当我编译结果与frase相同时,它并没有修改它。我将用新代码修改主帖子
void eliminar_espacios(char oracion[100]) {
    int i;
    for(i=0;oracion[i]!='\0';i++) {
        if(oracion[i]==' ' && (oracion[i+1]==' ' || oracion[i+1]=='\0')) {
            oracion[i]=oracion[i+1];
        }
    }
}