鱼C论坛

 找回密码
 立即注册
查看: 52|回复: 8

为什么无法完成输入

[复制链接]
发表于 前天 15:12 | 显示全部楼层 |阅读模式

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

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

x
题目是计算一串数字中1,2,3分别出现的次数
#include <stdio.h>

int main()
{
        int fun(int str[20],int c);
        
        int str[20];
        int i,c1,c2,c3;
        i=0;
        printf("请输入一串数字(输入0表示输入结束):\n");
        scanf ("%d",&str[0]);
        while(str[i])
        {
                i++;
                scanf("%d",&str[i]);
        }
        c1=fun (str,1);
        c2=fun (str,2);
        c3=fun (str,3);
        
        printf("1的次数为:%d\n2的次数为:%d\n3的次数为:%d\n",c1,c2,c3);
        
        return 0;
}

int fun(int str[20],int c)
{
        int count,i;
        count = i = 0;
        while(str[i])
        {
                if(str[i]==c)
                count++;
                i++;
        }
        
        return count;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 前天 15:12 | 显示全部楼层
你的程序有几处存在问题,下面是一些需要修改的地方:

1. **头文件缺失**:你需要包含`#include <stdio.h>`以便使用`printf`和`scanf`函数。

2. **数组存储输入**:你输入的数字需要存储起来以便后续处理,但程序中未实现这一点。

3. **函数设计问题**:`fun`函数没有对输入过的数字串进行处理,因为`str`在函数调用时已经被重定义。

4. **循环逻辑**:在主循环中计数时,你只是读取但没有存储这些数据。

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

int fun(int str[], int length, int c);

int main()
{
    int str[100]; // 假设最多输入100个数字
    int i, c1, c2, c3;
    i = 0;
    printf("请输入一串数字(输入0表示输入结束):\n");
    
    while(1)
    {
        scanf("%d", &str[i]);
        if(str[i] == 0) break;
        i++;
    }
    
    c1 = fun(str, i, 1);
    c2 = fun(str, i, 2);
    c3 = fun(str, i, 3);
    
    printf("1的次数为:%d\n2的次数为:%d\n3的次数为:%d\n", c1, c2, c3);
    
    return 0;
}

int fun(int str[], int length, int c)
{
    int count = 0;
    
    for(int i = 0; i < length; i++)
    {
        if(str[i] == c)
            count++;
    }
    
    return count;
}

在这个版本中:

- 使用了一个数组来存储用户输入的数字。
- `fun`函数接受一个数组和它的长度来计算目标数字出现的次数。
- 读取输入直到遇到0为止,并使用位置索引`i`来控制输入的数量。

希望这个修改可以帮助你理解问题并解决它。

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

使用道具 举报

 楼主| 发表于 前天 15:25 | 显示全部楼层
FishC 发表于 2024-11-23 15:12
你的程序有几处存在问题,下面是一些需要修改的地方:

1. **头文件缺失**:你需要包含`#include `以便使 ...

我不太明白为什么我的数据输入没有被存储?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 15:32 | 显示全部楼层
跑不掉 发表于 2024-11-23 15:25
我不太明白为什么我的数据输入没有被存储?


在你的代码中,的确存在数据存储的问题。你的初始代码只是循环读取输入,然后重复覆盖`str`变量,而没有将输入的数据存储到一个容器里,如数组或列表中。这就是为什么在调用函数`fun`时,它无法处理所有输入的数据。

要存储这些输入,你需要使用一个数组。这里是一个修正后的代码示例,它可以存储并统计1, 2, 3出现的次数:
#include <stdio.h>

int fun(int str[], int length, int c);

int main()
{
    int str[100]; // 假设最多输入100个数字
    int i, count, c1, c2, c3;
    i = 0;
    printf("请输入一串数字(输入0表示输入结束):\n");
    
    while(1)
    {
        scanf("%d", &count);
        if(count == 0) break;
        str[i] = count;  // 将输入的数据存储到数组中
        i++;
    }
    
    c1 = fun(str, i, 1);
    c2 = fun(str, i, 2);
    c3 = fun(str, i, 3);
    
    printf("1的次数为:%d\n2的次数为:%d\n3的次数为:%d\n", c1, c2, c3);
    
    return 0;
}

int fun(int str[], int length, int c)
{
    int count = 0;
    for(int i = 0; i < length; i++)
    {
        if(str[i] == c)  // 检查数组中的每一个元素
            count++;
    }
    
    return count;
}

在这个版本中,我们使用一个`str`数组来存储所有用户的输入。用户每输入一个数据,就存储在数组的相应位置上。当输入数字为0时,停止输入。然后数组被传递给函数`fun`进行统计1, 2, 3的出现次数。因此,你就可以对所有输入数据进行处理了。

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

使用道具 举报

 楼主| 发表于 前天 15:43 | 显示全部楼层
FishC 发表于 2024-11-23 15:12
你的程序有几处存在问题,下面是一些需要修改的地方:

1. **头文件缺失**:你需要包含`#include `以便使 ...

用scanf不是将输入数据存入数组中了吗?而且在while循环中不是实现了在数组中挨个存放数据,为什么没有成功存储呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 15:50 | 显示全部楼层
跑不掉 发表于 2024-11-23 15:43
用scanf不是将输入数据存入数组中了吗?而且在while循 ...


你的初始代码中实际上并没有使用数组来存储输入的数据。`scanf ("%d",&str);`仅仅是将用户输入的数字存储在`str`这个单一的整数变量中。每次循环,新的输入会覆盖`str`上的旧值,所以你最终只能保留最后一次的输入,而不是全部的数据。

要实现存储所有输入的数字,你需要使用数组。在这里,我会给出一个修改后的代码示例,其中包含数组来存储用户输入的所有数字:
#include <stdio.h>

int fun(int arr[], int length, int c);

int main()
{
    int str[100]; // 假设最多输入100个数字
    int i = 0, c1, c2, c3, temp;
    
    printf("请输入一串数字(输入0表示输入结束):\n");
    
    while(1)
    {
        scanf("%d", &temp);
        if(temp == 0) break;
        str[i++] = temp;  // 将输入的数据存储到数组中
    }
    
    c1 = fun(str, i, 1);
    c2 = fun(str, i, 2);
    c3 = fun(str, i, 3);
    
    printf("1的次数为:%d\n2的次数为:%d\n3的次数为:%d\n",c1, c2, c3);
    
    return 0;
}

int fun(int arr[], int length, int c)
{
    int count = 0;
    
    for(int i = 0; i < length; i++)
    {
        if(arr[i] == c)  // 检查数组中的每一个元素
            count++;
    }
    
    return count;
}

在这个示例中,我们:

- 使用一个`int`类型的数组`str`来存储用户的输入。
- `i`被用作数组的索引,每次输入一个数字,都会存储在数组的下一个位置。
- 使用`temp`来暂时存储输入值,确认不为0后再存入数组中。
- 修改了`fun`函数,使其接收一个数组参数来统计指定数字的次数。

通过这种方式,就可以确保所有的输入都被正确地存储并用于后续处理。

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

使用道具 举报

发表于 前天 17:49 | 显示全部楼层
本帖最后由 jackz007 于 2024-11-23 17:50 编辑

        代码没有问题,是你输入方法有问题,看看我的:
D:\[exercise]\C>x
请输入一串数字(输入0表示输入结束):
1 2 3 3 3 2 1 2 3 1 0
1的次数为:3
2的次数为:3
3的次数为:4

D:\[exercise]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 19:00 | 显示全部楼层
jackz007 发表于 2024-11-23 17:49
代码没有问题,是你输入方法有问题,看看我的:

我是输入一个数字按一个回车键,是回车键的问题吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 19:17 | 显示全部楼层
本帖最后由 jackz007 于 2024-11-24 19:18 编辑
跑不掉 发表于 2024-11-24 19:00
我是输入一个数字按一个回车键,是回车键的问题吗

D:\[exercise]\C>g++ -static -o x x.c

D:\[exercise]\C>x
请输入一串数字(输入0表示输入结束):
1
2
3
3
3
2
1
2
3
1
0
1的次数为:3
2的次数为:3
3的次数为:4

D:\[exercise]\C>

        也没有任何问题呀大哥!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 04:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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