C语言 无法替换行,结果-随机符号行

z18hc3ub  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(69)

我在大学里有一个任务,要求我输入2行,然后替换它们。
如果你能告诉我我错在哪里,我会非常感激的。
附言:这个任务还要求我写的程序应该有两个函数,而不是一个函数。所以,直到我把代码分解成函数,它才能正常工作。

#include <stdio.h>
#include <string.h>
#include <malloc.h>

int entstr1(char *, int long1);
int entstr2(char *, int long2);
int plustr(char*, char*, char*, int, int, int);
int i;
int longall, long1, long2;

int main(void) {
    char str1[7], str2[7], rstr[14];;

    

    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

    entstr1(str1, long1);
    entstr2(str2, long2);

    printf("%s", str1);
    printf("%s", str2);

    longall = long1 + long2;
    printf("\n%d", longall); // 

    plustr(str1, str2, rstr, longall, long1, long2);
    printf("\n\nResult line: %s", rstr);

    return 0;

}

int entstr1(char *str1, int long1) {
    
    printf("Enter 1 line: ");
    fgets(str1, sizeof str1, stdin);
    fflush(stdin);
    long1 = strlen(str1);
    printf("\nLength of 1 line: %d\n", long1); //

    return 1;
}

int entstr2(char* str2, int long2) {

    printf("Enter 1 line: ");
    fgets(str2, sizeof str2, stdin);
    fflush(stdin);
    long2 = strlen(str2);
    printf("\nLength of 2 line: %d\n", long2); //

    return 1;
}

int plustr(char* str1, char* str2, char* rstr, int longall, int long1, int long2) {

    for (i = longall-1, long1; i > long2; i--, long1--) {
        rstr[i] = str1[long1];
    }
    for (i = long2; i != 0; i--) {
        rstr[i] = str2[i];
    }
    return 1;
}

字符串
我已经添加了一些测试命令,看看“longall”是有一个坏的值,所以它是!IDK为什么它变成0,但在entstr 1和entstr 2中的命令显示,long 1和long 2有正确的值,但然后,它变成0在两个变量时,它再次去主函数“:

y4ekin9u

y4ekin9u1#

@Egor我想知道我的代码是否完全实现了你的想法。你能检查它是否正确吗?然后,如果需要的话,我会解释它。但就我所知,你是一个很好的编码器,每次看到这段代码都不需要任何解释。
这就是:

#include <stdio.h>
#include <string.h>

#define MAX_LENGTH 7

int entstr1(char *, int *long1);
int entstr2(char *, int *long2);
int plustr(char *, char *, char *, int, int, int);

int main(void) {
    char str1[MAX_LENGTH], str2[MAX_LENGTH], rstr[MAX_LENGTH * 2];
    int longall, long1, long2;

    entstr1(str1, &long1);
    entstr2(str2, &long2);

    printf("%s", str1);
    printf("%s", str2);

    longall = long1 + long2;
    printf("\n%d", longall);

    plustr(str1, str2, rstr, longall, long1, long2);
    printf("\n\nResult line: %s", rstr);

    return 0;
}

int entstr1(char *str1, int *long1) {
    printf("Enter 1 line: ");
    fgets(str1, MAX_LENGTH, stdin);
    fflush(stdin);
    *long1 = strlen(str1) - 1; // Adjust for the newline character
    printf("\nLength of 1 line: %d\n", *long1);

    return 1;
}

int entstr2(char *str2, int *long2) {
    printf("Enter 2 line: ");
    fgets(str2, MAX_LENGTH, stdin);
    fflush(stdin);
    *long2 = strlen(str2) - 1; // Adjust for the newline character
    printf("\nLength of 2 line: %d\n", *long2);

    return 1;
}

int plustr(char *str1, char *str2, char *rstr, int longall, int long1, int long2) {
    for (int i = 0; i < long1; i++) {
        rstr[i] = str1[i];
    }

    for (int i = 0; i < long2; i++) {
        rstr[long1 + i] = str2[i];
    }

    rstr[longall] = '\0'; // Null-terminate the result string

    return 1;
}

字符串
这是我的结果:
x1c 0d1x的数据
希望能对您有所帮助。

相关问题