C阵列-对错误输入的错误响应?

C阵列-对错误输入的错误响应?,c,arrays,for-loop,C,Arrays,For Loop,我有一门编程课程(初学者水平)的助教,唯一一件我不能做对的事(至少根据老师的说法)是其中一个函数如何处理错误的输入。它看起来像这样: 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):: ");

我有一门编程课程(初学者水平)的助教,唯一一件我不能做对的事(至少根据老师的说法)是其中一个函数如何处理错误的输入。它看起来像这样:

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");
void Modify(int-id[],char-str[100][30],int-kredit[],int-count)
{
系统(“cls”);
int搜索值;
布尔标志=假;
printf(“输入要修改的ID(1-100):”;
scanf(“%d”,搜索值(&U);
for(int i=0;i
任务的一部分,描述如何进行修改:

c)修改数据

  • 根据b点进行搜索和显示(不同功能-> 搜索(U值)
  • 如果找到该记录,请询问新数据
  • 身份证不能修改
  • 将修改后的记录保存到数组中,覆盖旧记录

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

处理错误意味着考虑可能出错的事情。快速查看程序后

如果输入的值超出所需范围,会发生什么情况? 如果计数大于应有值或为负,会发生什么情况? 如果kredit比应该的小,会发生什么? 如果str中的字符串没有NUL终止符,会发生什么情况


一般来说,您不必在每次函数调用时验证每个参数(虽然这可能有助于在开发过程中发现错误),但您应该明确验证用户输入。

处理错误意味着考虑可能出错的事情。在快速查看程序后

如果输入的值超出所需范围,会发生什么情况? 如果计数大于应有值或为负,会发生什么情况? 如果kredit比应该的小,会发生什么? 如果str中的字符串没有NUL终止符,会发生什么情况


一般来说,您不必在每次函数调用时验证每个参数(尽管这可能有助于在开发过程中发现bug),但你肯定应该验证用户输入。

问题是什么?你的老师说什么是正确答案?你认为正确答案是什么?与问题不太相关,但这很麻烦,你应该检查。你不检查
scanf
的结果。如果失败(用户没有输入数字),则
Search\u值将是未定义的(您也不初始化它)。因为
count
索引
str
,它不能大于100。在
scanf(“%s”,str[i]);
中,您不处理读取的字符串长度可能不超过29个字符(加上
\0
).问题是什么?你的老师说什么是正确答案?你认为正确答案是什么?与问题不太相关,但这都很麻烦,你应该检查。你没有检查
scanf
的结果。如果失败(用户没有输入数字),那么
搜索值将无法定义。(您也不初始化它。)因为
count
索引
str
,所以它不能大于100。在
scanf(“%s”,str[i]);
中,您不能处理读取的字符串不能超过29个字符(加上
\0
)。