鱼C论坛

 找回密码
 立即注册
查看: 1444|回复: 3

[已解决]求问:这段输入二维数组代码的问题

[复制链接]
发表于 2024-4-10 15:45:41 | 显示全部楼层 |阅读模式

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

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

x
  1. int main(){
  2.        
  3.         char str[5][100];
  4.         int i = 0,j = 0;
  5.        
  6.         printf("请输入五句口号:\n");
  7.        
  8.         while(i < 5)
  9.         {
  10.                 for(j ; (getchar() != '\n');j++){
  11.                
  12.                 str[i][j] = getchar();
  13.             
  14.                 }
  15.                 str[i][j] = '\0';
  16.                 i++;
  17.         }
  18.        
  19.         printf("你输入的是:\n");
  20.    
  21.         for( i = 0;i < 5;i++)
  22.         {
  23.             printf("%s\n",str[i]);
  24.         }
  25.        
  26.        
  27.        
  28.         return 0;
  29. }
复制代码
最佳答案
2024-4-10 16:35:39
本帖最后由 jackz007 于 2024-4-10 17:58 编辑
  1.         for(j ; (getchar() != '\n');j++) {  // 这个 getchar() 不会被纳入字符串 str,此外,j 不初始化为 0,只有第 1 个字符串能被正确录入,后续的都会出错。
  2.                 str[i][j] = getchar() ;     // 这个 getchar() 会被纳入字符串 str,但是,如果这时键入的是 '\n',并不会结束输入
复制代码

        循环中使用了两个 getchar(),一个用于判断键入的是否是 '\n',另一个用于录入字符串 str,这样就会存在以下两个问题:
    1、每键入 2 个字符才会录入其中的一个(第 2 个字符)进入字符串 str
    2、键入回车不一定能够结束一个字符串的输入。只有当 '\n' 恰好是两个字符中的前一个时才可以,否则,只是会直接被录入 str,而并不能结束输入;
         应该这么修改:
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         char str[5][100]                                            ;
  5.         int i , j                                                   ;
  6.         printf("请输入五句口号:\n")                                ;
  7.         for(i = 0 ; i < 5 ; i ++) {
  8.                 for(j = 0 ; (str[i][j] = getchar()) != '\n' ; j ++) ; // 只用一个 getchar(),把判断和录入整合起来,此外,每个字符串都要初始化 j = 0
  9.                 str[i][j] = '\0'                                    ;
  10.         }
  11.         printf("你输入的是:\n")                                    ;
  12.         for( i = 0 ; i < 5 ; i ++) printf("%s\n" , str[i])          ;
  13. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-4-10 15:46:03 | 显示全部楼层
这段代码存在几个问题:

1. 变量`str`应该是一个字符数组,而不是一个单个字符。

2. 在while循环中,你使用了一个for循环来读取输入的字符,但是这个for循环没有初始化j的初始值,会导致j的值随机。你可以将`j`的初始化值改为0。

3. 在for循环中,你两次调用了getchar函数,这将读取两个字符,而不是一个字符。你只需要在for循环内部调用一次getchar函数即可。

4. 在for循环内部,你没有对输入的字符进行赋值操作,只是将其存储在了变量`str`中,并且在循环结束后将`str`赋值为'\0'。这样做并不能将输入的字符存储到一个二维数组中。

5. 在最后的for循环中,你只使用了一个字符串变量`str`来打印五句话,这样做是不正确的。你需要使用一个二维字符数组来存储输入的五句话。

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

  1. #include <stdio.h>

  2. int main(){
  3.        
  4.         char slogans[5][100];
  5.        
  6.         printf("请输入五句口号:\n");
  7.        
  8.         for (int i = 0; i < 5; i++) {
  9.                 fgets(slogans[i], 100, stdin);
  10.         }
  11.        
  12.         printf("你输入的是:\n");
  13.    
  14.         for(int i = 0; i < 5; i++) {
  15.             printf("%s", slogans[i]);
  16.         }
  17.        
  18.         return 0;
  19. }
复制代码


修复后的代码中,我们创建了一个二维字符数组`slogans`,它可以存储五句话。然后使用`fgets`函数来读取输入的每一句话,并将其存储到`slogans`数组中。最后使用一个for循环来打印出输入的五句话。

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

使用道具 举报

发表于 2024-4-10 16:35:39 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2024-4-10 17:58 编辑
  1.         for(j ; (getchar() != '\n');j++) {  // 这个 getchar() 不会被纳入字符串 str,此外,j 不初始化为 0,只有第 1 个字符串能被正确录入,后续的都会出错。
  2.                 str[i][j] = getchar() ;     // 这个 getchar() 会被纳入字符串 str,但是,如果这时键入的是 '\n',并不会结束输入
复制代码

        循环中使用了两个 getchar(),一个用于判断键入的是否是 '\n',另一个用于录入字符串 str,这样就会存在以下两个问题:
    1、每键入 2 个字符才会录入其中的一个(第 2 个字符)进入字符串 str
    2、键入回车不一定能够结束一个字符串的输入。只有当 '\n' 恰好是两个字符中的前一个时才可以,否则,只是会直接被录入 str,而并不能结束输入;
         应该这么修改:
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         char str[5][100]                                            ;
  5.         int i , j                                                   ;
  6.         printf("请输入五句口号:\n")                                ;
  7.         for(i = 0 ; i < 5 ; i ++) {
  8.                 for(j = 0 ; (str[i][j] = getchar()) != '\n' ; j ++) ; // 只用一个 getchar(),把判断和录入整合起来,此外,每个字符串都要初始化 j = 0
  9.                 str[i][j] = '\0'                                    ;
  10.         }
  11.         printf("你输入的是:\n")                                    ;
  12.         for( i = 0 ; i < 5 ; i ++) printf("%s\n" , str[i])          ;
  13. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-14 17:19:10 | 显示全部楼层
jackz007 发表于 2024-4-10 16:35
循环中使用了两个 getchar(),一个用于判断键入的是否是 '\n',另一个用于录入字符串 str,这样 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-8 19:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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