鱼C论坛

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

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

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

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

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

x
int main(){
        
        char str[5][100];
        int i = 0,j = 0;
        
        printf("请输入五句口号:\n");
        
        while(i < 5)
        {
                for(j ; (getchar() != '\n');j++){
                
                str[i][j] = getchar();
            
                }
                str[i][j] = '\0';
                i++;
        }
        
        printf("你输入的是:\n");
    
        for( i = 0;i < 5;i++)
        {
            printf("%s\n",str[i]);
        }
        
        
        
        return 0;
}
最佳答案
2024-4-10 16:35:39
本帖最后由 jackz007 于 2024-4-10 17:58 编辑
        for(j ; (getchar() != '\n');j++) {  // 这个 getchar() 不会被纳入字符串 str,此外,j 不初始化为 0,只有第 1 个字符串能被正确录入,后续的都会出错。 
                str[i][j] = getchar() ;     // 这个 getchar() 会被纳入字符串 str,但是,如果这时键入的是 '\n',并不会结束输入
        循环中使用了两个 getchar(),一个用于判断键入的是否是 '\n',另一个用于录入字符串 str,这样就会存在以下两个问题:
    1、每键入 2 个字符才会录入其中的一个(第 2 个字符)进入字符串 str
    2、键入回车不一定能够结束一个字符串的输入。只有当 '\n' 恰好是两个字符中的前一个时才可以,否则,只是会直接被录入 str,而并不能结束输入;
         应该这么修改:
#include <stdio.h>

int main(void)
{
        char str[5][100]                                            ;
        int i , j                                                   ;
        printf("请输入五句口号:\n")                                ;
        for(i = 0 ; i < 5 ; i ++) {
                for(j = 0 ; (str[i][j] = getchar()) != '\n' ; j ++) ; // 只用一个 getchar(),把判断和录入整合起来,此外,每个字符串都要初始化 j = 0
                str[i][j] = '\0'                                    ;
        }
        printf("你输入的是:\n")                                    ;
        for( i = 0 ; i < 5 ; i ++) printf("%s\n" , str[i])          ;
}
想知道小甲鱼最近在做啥?请访问 -> 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`来打印五句话,这样做是不正确的。你需要使用一个二维字符数组来存储输入的五句话。

下面是修复后的代码示例:
#include <stdio.h>

int main(){
        
        char slogans[5][100];
        
        printf("请输入五句口号:\n");
        
        for (int i = 0; i < 5; i++) {
                fgets(slogans[i], 100, stdin);
        }
        
        printf("你输入的是:\n");
    
        for(int i = 0; i < 5; i++) {
            printf("%s", slogans[i]);
        }
        
        return 0;
}

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-10 16:35:39 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2024-4-10 17:58 编辑
        for(j ; (getchar() != '\n');j++) {  // 这个 getchar() 不会被纳入字符串 str,此外,j 不初始化为 0,只有第 1 个字符串能被正确录入,后续的都会出错。 
                str[i][j] = getchar() ;     // 这个 getchar() 会被纳入字符串 str,但是,如果这时键入的是 '\n',并不会结束输入
        循环中使用了两个 getchar(),一个用于判断键入的是否是 '\n',另一个用于录入字符串 str,这样就会存在以下两个问题:
    1、每键入 2 个字符才会录入其中的一个(第 2 个字符)进入字符串 str
    2、键入回车不一定能够结束一个字符串的输入。只有当 '\n' 恰好是两个字符中的前一个时才可以,否则,只是会直接被录入 str,而并不能结束输入;
         应该这么修改:
#include <stdio.h>

int main(void)
{
        char str[5][100]                                            ;
        int i , j                                                   ;
        printf("请输入五句口号:\n")                                ;
        for(i = 0 ; i < 5 ; i ++) {
                for(j = 0 ; (str[i][j] = getchar()) != '\n' ; j ++) ; // 只用一个 getchar(),把判断和录入整合起来,此外,每个字符串都要初始化 j = 0
                str[i][j] = '\0'                                    ;
        }
        printf("你输入的是:\n")                                    ;
        for( i = 0 ; i < 5 ; i ++) printf("%s\n" , str[i])          ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 01:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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