跑不掉 发表于 2024-11-23 15:12:36

为什么无法完成输入

题目是计算一串数字中1,2,3分别出现的次数

#include <stdio.h>

int main()
{
        int fun(int str,int c);
       
        int str;
        int i,c1,c2,c3;
        i=0;
        printf("请输入一串数字(输入0表示输入结束):\n");
        scanf ("%d",&str);
        while(str)
        {
                i++;
                scanf("%d",&str);
        }
        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,int c)
{
        int count,i;
        count = i = 0;
        while(str)
        {
                if(str==c)
                count++;
                i++;
        }
       
        return count;
}

FishC 发表于 2024-11-23 15:12:49

你的程序有几处存在问题,下面是一些需要修改的地方:

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个数字
    int i, c1, c2, c3;
    i = 0;
    printf("请输入一串数字(输入0表示输入结束):\n");
   
    while(1)
    {
      scanf("%d", &str);
      if(str == 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 == c)
            count++;
    }
   
    return count;
}

在这个版本中:

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

跑不掉 发表于 2024-11-23 15:25:32

FishC 发表于 2024-11-23 15:12
你的程序有几处存在问题,下面是一些需要修改的地方:

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

我不太明白为什么我的数据输入没有被存储?

FishC 发表于 2024-11-23 15:32:24

跑不掉 发表于 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个数字
    int i, count, c1, c2, c3;
    i = 0;
    printf("请输入一串数字(输入0表示输入结束):\n");
   
    while(1)
    {
      scanf("%d", &count);
      if(count == 0) break;
      str = 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 == c)// 检查数组中的每一个元素
            count++;
    }
   
    return count;
}

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

跑不掉 发表于 2024-11-23 15:43:51

FishC 发表于 2024-11-23 15:12
你的程序有几处存在问题,下面是一些需要修改的地方:

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

用scanf不是将输入数据存入数组中了吗?而且在while循环中不是实现了在数组中挨个存放数据,为什么没有成功存储呢?

FishC 发表于 2024-11-23 15:50:17

跑不掉 发表于 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个数字
    int i = 0, c1, c2, c3, temp;
   
    printf("请输入一串数字(输入0表示输入结束):\n");
   
    while(1)
    {
      scanf("%d", &temp);
      if(temp == 0) break;
      str = 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 == c)// 检查数组中的每一个元素
            count++;
    }
   
    return count;
}

在这个示例中,我们:

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-11-23 17:49:42

本帖最后由 jackz007 于 2024-11-23 17:50 编辑

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

D:\\C>

跑不掉 发表于 2024-11-24 19:00:39

jackz007 发表于 2024-11-23 17:49
代码没有问题,是你输入方法有问题,看看我的:

我是输入一个数字按一个回车键,是回车键的问题吗

jackz007 发表于 2024-11-24 19:17:20

本帖最后由 jackz007 于 2024-11-24 19:18 编辑

跑不掉 发表于 2024-11-24 19:00
我是输入一个数字按一个回车键,是回车键的问题吗

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

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

D:\\C>

      也没有任何问题呀大哥!

跑不掉 发表于 2024-11-26 19:27:54

jackz007 发表于 2024-11-24 19:17
也没有任何问题呀大哥!

啊,那这下真给我搞懵了,只能是软件问题了吗{:5_107:}
页: [1]
查看完整版本: 为什么无法完成输入