【问题标题】:C arrays - Incorrect response to wrong input?C 数组 - 对错误输入的错误响应?
【发布时间】:2017-01-27 17:07:14
【问题描述】:

我有一个编程课程(初级)的评估,我唯一不能做对的事情(至少根据老师的说法)是其中一个函数如何处理错误的输入。自动取款机看起来是这样的:

void Modify(int id[], char str[100][30], int kredit[], int count)
{
    system("cls");
    int Search_value;
    bool flag = false;
    printf("Enter ID to be modified (1-100):: ");
    scanf("%d", &Search_value);
    for (int i = 0; i < count; i++)
    {
        if (id[i] == Search_value)
        {
            printf("Old record\n");
            printf("ID :: %d \n", id[i]);
            printf("Name :: %s \n", str[i]);
            printf("Kredit :: %d\n", kredit[i]);
            printf("New record\n");
            printf("Name :: ");
            scanf("%s",str[i]);
            printf("Kredit :: ");
            scanf("%d", &kredit[i]);
            printf("New data saved\n");
            flag = true;
        }
    }
    if (flag == false)
    {
        printf("ID not found\n");
    }
    system("pause");

描述如何进行修改的部分任务:

c) 修改数据

  • 根据b点做搜索和显示(不同的功能-> 搜索值)
  • 如果找到记录,请求新数据
  • 无法修改ID!
  • 将修改后的记录保存到数组中,覆盖旧记录

编译和运行没有任何问题。或者至少我没有注意到。当然,如果需要,我可以添加更多代码。

【问题讨论】:

  • 有什么问题吗?你的老师说的正确答案是什么?你认为正确的答案是什么?
  • 与问题没有太大关系,但这都很麻烦,你应该看看how to use struct s in C
  • 你没有检查scanf的结果。如果失败(用户没有输入数字),那么Search_value 将是未定义的。 (你也不初始化它。)
  • 因为count索引str,所以不能大于100。
  • scanf("%s",str[i]); 中,您无法处理读取的字符串可能不超过 29 个字符(加上 \0)。

标签: c arrays for-loop


【解决方案1】:

处理错误意味着考虑可能出错的事情。快速浏览一下您的程序后,

如果我输入的值超出所需范围会怎样? 如果计数大于应有的值或​​为负数会怎样? 如果 kredit 小于应有的值会怎样? 如果 str 中的字符串没有 NUL 终止符会怎样?

还有一些可以找到。通常,您不必在每次函数调用时验证每个参数(尽管这可能有助于在开发过程中发现错误),但您绝对应该验证用户输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-29
    • 2013-05-26
    • 2023-02-23
    • 2023-03-10
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2016-05-07
    相关资源
    最近更新 更多