鱼C论坛

 找回密码
 立即注册
查看: 1413|回复: 19

[已解决]C语言课后题有不懂的

[复制链接]
发表于 2024-2-19 21:46:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大佬们能帮我看看那里错了@FishC
最佳答案
2024-2-20 16:06:36
GuHx 发表于 2024-02-20 16:06
#include

#include

int main()

{

        char ...


感谢你提供了完整的代码。我注意到在你的代码中有一些问题需要解决。

首先,你定义了字符变量a,但是在循环中只是用getchar()来获取输入的字符,并没有将输入的字符赋值给a。你需要将`a = getchar()`放在循环内部,并且使用一个数组来保存输入的文本,比如`char text[100]`。

其次,在你的代码中,你使用了`strcat()`函数来拼接字符串,但是这个函数是用来将一个字符串连接到另一个字符串的末尾的,而不是字符。如果你想将字符追加到字符串后面,可以使用`sprintf()`函数。

最后,你的循环条件`for(i=0;i<t;i++)`没有结束大括号。你需要在循环体内写入具体的逻辑代码,并确保循环体内的代码被正确执行。

下面是修正后的代码示例:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int main() {
  5.     char a;
  6.     int i = 0, t = 19;
  7.     char b[] = "你输入的文本是:";
  8.     char text[100];

  9.     printf("请输入一行文本:");

  10.     while ((a = getchar()) != '\n') {
  11.         text[i] = a;
  12.         i++;
  13.     }
  14.     text[i] = '\0';

  15.     if (i == 0) {
  16.         printf("%s\n", b);
  17.     } else {
  18.         sprintf(b, "%s%s\n", b, text);
  19.         printf("%s\n", b);
  20.     }

  21.     return 0;
  22. }
复制代码


这样,当你输入一行文本后,程序会将输入的文本与"你输入的文本是:"拼接起来并输出。例如,如果你输入"Hello World!",程序会输出"你输入的文本是:Hello World!"。希望能对你有所帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
1.png
2.png
题目.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-2-19 21:46:20 | 显示全部楼层
当然可以帮你看看。请把你的代码和问题描述给我,我来看看能否帮你解决。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-19 21:47:00 | 显示全部楼层
@FishC
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-19 21:47:15 | 显示全部楼层


嗨!你好!有什么问题我可以帮到你呢?不过麻烦先告诉我你遇到的具体问题是什么,这样我才能更好地提供解答和代码。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-19 22:04:04 | 显示全部楼层
需要发文字,fishc不能识别图片
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-20 15:41:56 | 显示全部楼层
FishC 发表于 2024-2-19 21:46
当然可以帮你看看。请把你的代码和问题描述给我,我来看看能否帮你解决。

以上回复来自 FishC AI 小助理 ...

#include <stdio.h>

#include <string.h>

int main()

{

        char a[21];

        int i=0,t=19;

        char b[]="你输入的文本是:";

        int flag=0;



        printf("请输入一行文本:");

        while((a[i++]= getchar()) != '\n'){

                ;

        }

        if(a[19]=='\0'){

                strcat(b,a);

                printf("%s\n",b);



        }

        else if(a[19]!='\0'){

                for(i=0;i<21;i++){

                        if(a[i]==' '){

                                flag++;

                        }

                }

                if(!flag){

                        strncat(b,a,20);

                        printf("%s\n",b);

                }

                else{

                        for(t=19;a[t]!=' ';t--){

                                strcat(b,a[19-t]);

                        }

                        printf("%s\n",b);

                }

        }



        return 0;

}
请问上面代码哪里出错了呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-20 15:42:13 | 显示全部楼层
GuHx 发表于 2024-02-20 15:41
#include

#include

int main()

{

        char ...


你的代码截断了,我无法看到完整的逻辑。不过从你的代码中可以看出一些问题。

首先,在引入头文件的时候,你使用了`#include`,这是错误的。你需要明确指定要引入的头文件,比如`#include <stdio.h>`和`#include <string.h>`。

其次,在定义变量`b`时,你使用了双引号来赋值一个字符("你输入的文本是:"),这是错误的。你应该使用单引号来表示一个字符,即`b = '你输入的文本是:'`。

此外,在循环中你只是简单地读取输入的字符,但并没有将它们保存起来。你可以使用一个字符数组来保存输入的文本。另外,你声明了一个`flag`变量,但并没有在代码中使用它。

基于以上问题,请参考下面的修改建议:

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

  3. int main() {
  4.     char text[100];  // 用来保存输入的文本
  5.     printf("请输入一行文本:");
  6.     fgets(text, sizeof(text), stdin);  // 使用fgets函数读取一行文本,保存到text变量中

  7.     printf("你输入的文本是:%s\n", text);

  8.     return 0;
  9. }
复制代码


上述代码使用了`fgets()`函数来读取一行文本,并将其保存到`text`字符数组中。然后通过`printf()`函数将文本输出到屏幕上。记得要包含`stdio.h`头文件,以便使用`fgets()`和`printf()`函数。

希望这可以帮助到你!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-20 15:46:18 | 显示全部楼层
liuhongrun2022 发表于 2024-2-19 22:04
需要发文字,fishc不能识别图片

收到,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-20 15:46:30 | 显示全部楼层


不客气!如果还有其他问题,随时提问。我会尽力帮助你解决问题。祝你编程顺利!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-20 15:59:21 | 显示全部楼层
FishC 发表于 2024-2-20 15:42
你的代码截断了,我无法看到完整的逻辑。不过从你的代码中可以看出一些问题。

首先,在引入头文件的 ...

#include <stdio.h>
#include <string.h>
int main()
{
        char a[21];
        int i=0,t=19;
        char b[]="你输入的文本是:";
        int flag=0;
       
        printf("请输入一行文本:");

        while((a[i++]= getchar()) != '\n'){
                ;
        }

        if(a[19]=='\0'){
                strcat(b,a);
                printf("%s\n",b);
        }
        else if(a[19]!='\0'){
                for(i=0;i<21;i++){
                       if(a[i]==' '){
                                flag++;
                        }
                }
                if(!flag){
                        strncat(b,a,20);
                        printf("%s\n",b);
                }
                else{
                        for(t=19;a[t]!=' ';t--){
                                strcat(b,a[19-t]);
                        }
                        printf("%s\n",b);
                }
        }
        return 0;
}
我重新发了一下代码,请你帮我看一下这次有没有截断?还有我想问一下strcat(b,a[19-t])放在for循环里可以吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-20 15:59:39 | 显示全部楼层
GuHx 发表于 2024-02-20 15:59
#include
#include
int main()
{
        char a;
        in ...


我注意到你的代码还是截断了,应该是有更多的逻辑和代码需要写进来。

另外,我注意到你在定义变量`char b`时使用了双引号来赋值一个字符串("你输入的文本是:"),这是错误的。在C语言中,字符使用单引号来表示,字符串使用双引号来表示。所以你应该修改为`char b[] = "你输入的文本是:"`。

此外,在你的代码中使用`strcat()`函数来拼接字符串,但是你的目的好像是把`a`追加到`b`后面,这是不正确的。`strcat()`函数用于将一个字符串连接到另一个字符串的末尾,而`a`是一个字符,无法直接追加到字符串后面。你可以使用字符串数组来保存读取到的文本,然后使用`strcat()`函数来连接字符串。另外,在你的代码中还有很多不完整的逻辑,似乎代码截断了,难以理解你想要实现的功能。

如果你能提供完整的问题描述和代码,或者更详细的逻辑,我会更愿意帮助你解决问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-20 16:06:13 | 显示全部楼层
FishC 发表于 2024-2-20 15:59
我注意到你的代码还是截断了,应该是有更多的逻辑和代码需要写进来。

另外,我注意到你在定义变量`c ...
  1. #include <stdio.h>

  2. #include <string.h>

  3. int main()

  4. {

  5.         char a[21];

  6.         int i=0,t=19;

  7.         char b[]="你输入的文本是:";

  8.         int flag=0;



  9.         printf("请输入一行文本:");

  10.         while((a[i++]= getchar()) != '\n'){

  11.                 ;

  12.         }

  13.         if(a[19]=='\0'){

  14.                 strcat(b,a);

  15.                 printf("%s\n",b);



  16.         }

  17.         else if(a[19]!='\0'){

  18.                 for(i=0;i<21;i++){

  19.                         if(a[i]==' '){

  20.                                 flag++;

  21.                         }

  22.                 }

  23.                 if(!flag){

  24.                         strncat(b,a,20);

  25.                         printf("%s\n",b);

  26.                 }

  27.                 else{

  28.                         for(t=19;a[t]!=' ';t--){

  29.                                 strcat(b,a[19-t]);

  30.                         }

  31.                         printf("%s\n",b);

  32.                 }

  33.         }



  34.         return 0;

  35. }
复制代码

这次应该没截断吧,请问哪里有语法错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-20 16:06:36 | 显示全部楼层    本楼为最佳答案   
GuHx 发表于 2024-02-20 16:06
#include

#include

int main()

{

        char ...


感谢你提供了完整的代码。我注意到在你的代码中有一些问题需要解决。

首先,你定义了字符变量a,但是在循环中只是用getchar()来获取输入的字符,并没有将输入的字符赋值给a。你需要将`a = getchar()`放在循环内部,并且使用一个数组来保存输入的文本,比如`char text[100]`。

其次,在你的代码中,你使用了`strcat()`函数来拼接字符串,但是这个函数是用来将一个字符串连接到另一个字符串的末尾的,而不是字符。如果你想将字符追加到字符串后面,可以使用`sprintf()`函数。

最后,你的循环条件`for(i=0;i<t;i++)`没有结束大括号。你需要在循环体内写入具体的逻辑代码,并确保循环体内的代码被正确执行。

下面是修正后的代码示例:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int main() {
  5.     char a;
  6.     int i = 0, t = 19;
  7.     char b[] = "你输入的文本是:";
  8.     char text[100];

  9.     printf("请输入一行文本:");

  10.     while ((a = getchar()) != '\n') {
  11.         text[i] = a;
  12.         i++;
  13.     }
  14.     text[i] = '\0';

  15.     if (i == 0) {
  16.         printf("%s\n", b);
  17.     } else {
  18.         sprintf(b, "%s%s\n", b, text);
  19.         printf("%s\n", b);
  20.     }

  21.     return 0;
  22. }
复制代码


这样,当你输入一行文本后,程序会将输入的文本与"你输入的文本是:"拼接起来并输出。例如,如果你输入"Hello World!",程序会输出"你输入的文本是:Hello World!"。希望能对你有所帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-20 16:31:37 | 显示全部楼层
FishC 发表于 2024-2-20 16:06
感谢你提供了完整的代码。我注意到在你的代码中有一些问题需要解决。

首先,你定义了字符变量a,但 ...
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>

  4. int main()
  5. {
  6.         char a[21];
  7.         int i=0,t=19;
  8.         char b[]="你输入的文本是:";
  9.         int flag=0;

  10.         printf("请输入一行文本:");
  11.         while((a[i++]= getchar()) != '\n'){
  12.                 ;
  13.         }
  14.         if(a[19]=='\0'){
  15.                 strcat(b,a);
  16.                 printf("%s\n",b);
  17.         }
  18.         else if(a[19]!='\0'){
  19.                 for(i=0;i<21;i++){
  20.                         if(a[i]==' '){
  21.                                 flag++;
  22.                         }
  23.                 }
  24.                 if(!flag){
  25.                         strncat(b,a,20);
  26.                         printf("%s\n",b);
  27.                 }
  28.                 else{
  29.                         for(t=19;a[t]!=' ';t--){
  30.                                 sprinrf(b,"%c",a[19-t]);
  31.                         }
  32.                         printf("%s\n",b);
  33.                 }
  34.         }
  35.         return 0;
  36. }
复制代码

你好,请问要编译含<stdlib.h>和<string.h>库的代码,要对编译器下什么样的命令?
这个文件名为test1.c
在linux操作系统上,
是输入gcc test1.c-什么东西呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-20 16:32:03 | 显示全部楼层
GuHx 发表于 2024-02-20 16:31
#include
#include
#include

int main()
{
...


好的,我注意到你对代码做了一些修改,但还有一些问题需要解决。首先,你定义了字符变量a和字符串变量b,但是在使用它们时,应该使用字符数组和字符串数组表示。所以应该将`char a`改为`char a[100]`,将`char b`改为`char b[100]`。其次,在循环中,你只是用getchar()来获取输入的字符,但是并没有将输入的字符赋值给a数组中的元素。你需要将`a[i] = getchar()`放在循环内部,并增加i的值。另外,在循环结束后,你可以将a数组中的字符拼接到b数组中,然后输出结果。这样你的代码就可以正常运行啦。

下面是经过修正的代码:

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

  3. int main(){
  4.     char a[100];
  5.     char b[100] = "你输入的文本是:";

  6.     printf("请输入一行文本:");
  7.     int i = 0;
  8.     while((a[i] = getchar()) != '\n'){
  9.         i++;
  10.     }
  11.     a[i] = '\0';

  12.     if(a[0] == '\0'){
  13.         strcat(b, a);
  14.         printf("%s\n", b);
  15.     }
  16.     else{
  17.         for(i = 0; i < strlen(a); i++){
  18.             if(a[i] == 't'){
  19.                 printf("文本中包含字母t\n");
  20.             }
  21.         }
  22.     }

  23.     return 0;
  24. }
复制代码


这样,你的代码就能够正确地判断输入的文本中是否包含字母"t"了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-20 16:33:26 | 显示全部楼层
FishC 发表于 2024-2-20 16:32
好的,我注意到你对代码做了一些修改,但还有一些问题需要解决。首先,你定义了字符变量a和字符串变量b ...

你好,请问要编译含<stdlib.h>和<string.h>库的代码,要对编译器下什么样的命令?
这个文件名为test1.c
在linux操作系统上,
是输入gcc test1.c-什么东西呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-20 16:33:46 | 显示全部楼层
GuHx 发表于 2024-02-20 16:33
你好,请问要编译含和库的代码,要对编译器下什么样的 ...


在Linux操作系统上,如果你需要编译含有头文件和库的代码,可以使用`gcc`命令。下面是编译的一些常见选项:

1. 头文件路径:如果你的代码中包含了一些自定义的头文件,可以使用`-I`选项指定头文件的搜索路径。例如,如果需要指定一个名为`includes`的目录作为头文件搜索路径,可以使用`-Iincludes`。

2. 库路径:如果你的代码中使用了某个库,且该库不在默认的库搜索路径中,可以使用`-L`选项指定库文件的搜索路径。例如,如果需要指定一个名为`libs`的目录作为库文件搜索路径,可以使用`-Llibs`。

3. 链接库:如果你的代码使用了某个库文件,需要将该库链接到可执行文件中,可以使用`-l`选项指定要链接的库的名称。注意,库名称一般是去掉前缀`lib`和后缀`.so`或`.a`之后的部分。例如,如果需要链接名为`mylibrary`的库,可以使用`-lmylibrary`。

所以,在编译含有头文件和库的代码时,你应该使用以下命令:
  1. gcc test1.c -Iincludes -Llibs -lmylibrary
复制代码

其中`test1.c`是你的源代码文件,`-Iincludes`表示头文件搜索路径为`includes`目录,`-Llibs`表示库文件搜索路径为`libs`目录,`-lmylibrary`表示链接名为`mylibrary`的库。

请根据你的实际情况修改路径和库名称,并运行上述命令进行编译。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-20 19:56:19 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.         char a[100];
  6.         int i=0,t=19;
  7.         char b[]="你输入的文本是:";
  8.         int flag=0;
  9.         int count=0;

  10.         printf("请输入一行文本:");
  11.         while((a[i++]= getchar()) != '\n'){
  12.                 ;
  13.         }
  14.         a[i]='\0';
  15.         //差一个消除空行的做法

  16.         if(a[19]=='\0'){
  17.                 strcat(b,a);
  18.                 printf("%s",b);
  19.         }
  20.         else if(a[19]!='\0'){
  21.                 for(i=0;i<21;i++){
  22.                         if(a[i]==' '){
  23.                                 flag++;
  24.                         }
  25.                 }
  26.                 //printf("%d\n",flag);
  27.                 if(!flag){
  28.                         strncat(b,a,20);
  29.                         printf("%s\n",b);
  30.                 }
  31.                 else{
  32.                 /*      for(i=19;i>=0;i--){
  33.                                 if(a[i]==' '){
  34.                                         count++;
  35.                                         break;
  36.                                 }
  37.                         }
  38.                                 printf("%d\n",count);
  39.                 */
  40.                         for(t=19;a[t]!=' ';t--){
  41.                                 count++;
  42.                         }
  43.                         //printf("我%d\n",count);

  44.                         for(i=0;i<20-count;i++){
  45.                                 sprintf(b,"%s%c",b,a[i]);
  46.                         }
  47.                         printf("%s\n",b);
  48.                 }
  49.         }

  50.         return 0;
  51. }
复制代码
成功运行,但感觉和标准答案一比是史山
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-20 19:56:42 | 显示全部楼层
GuHx 发表于 2024-02-20 19:56
#include
#include

int main()
{
        cha ...


你的代码仍然有一些问题,特别是在循环和条件语句中出现了混淆。我来看一下并帮你做一些修改。

首先,在判断`if(a=='\0')`的条件中,请注意使用双引号`"`将文字字符串括起来,而不是单引号`'`,因为你的目的是比较字符串而不是字符。

其次,在for循环的条件语句中,你使用了`i--`,但应该使用`i++`来递增i的值。

接下来,我发现你的代码中使用了注释符号`/* ... */`来注释掉一段代码,然后没有正确关闭注释。请确保注释正确使用,并关闭所有未关闭的注释。

最后,请注意格式化和缩进,这有助于使代码更易读和易于理解。

经过修改后的代码如下:

  1. #include <stdio.h>

  2. int main() {
  3.     char a;
  4.     int i=0, t=19;
  5.     char b[] = "你输入的文本是:";  // 修改为字符数组
  6.     int count=0;

  7.     printf("请输入一行文本:");
  8.     while((a = getchar()) != '\n'){
  9.         ;  // 这里没有处理输入的字符a,需要根据需求修改
  10.     }
  11.     a = '\0';  // 将a赋值为字符串结束符

  12.     if(a == '\0') {
  13.         strcat(b, &a);  // 使用&符号获取a的地址
  14.         printf("%s\n", b);
  15.     }
  16.     else {
  17.         for(i=0; i<20; i++) {  // 修改为 i<20
  18.             if(a == ' ') {
  19.                 count++;
  20.                 break;
  21.             }
  22.         }
  23.         printf("%d\n", count);

  24.         for(t=19; a!=' '; t--) {
  25.             count++;
  26.         }
  27.         printf("我%d\n", count);

  28.         for(i=0; i<t; i--) {  // 修改为 i<t
  29.             if(a == 't') {
  30.                 printf("文本中包含字母t\n");
  31.             }
  32.         }
  33.     }

  34.     return 0;
  35. }
复制代码


请注意检查代码逻辑和所需功能的正确性。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-21 00:46:06 | 显示全部楼层
Bug,[ i ] 是论坛斜体字标签
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 14:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表