gpt4 book ai didi

c - 默认情况下局部变量中有什么?

转载 作者:行者123 更新时间:2023-11-30 20:57:48 25 4
gpt4 key购买 nike

我已经完成了学校作业,我尝试根据导师的评论来修改它。然而,在我的导师最新的电子邮件中,他指出“如果不进行这种更改就可以工作,那是幸运的。对于局部变量,默认情况下你不知道它们里面有什么。”我只是不知道我的代码中的默认值是什么

这是我的导师的评论:1.问题说只能使用局部变量。

  • 读取函数应该读取并验证输入字符串的长度。第 14 行和第 15 行应该位于 read 函数内,而不是 main 中。

  • 由于您使用文本作为全局变量,因此您无需使用字符串参数 s、st 和 str 即可编写函数。这项作业的全部目的是测试您使用字符串参数进行编程的能力。虽然您的函数似乎具有字符串参数,但它们也可能不存在全局文本,而仅存在于函数内部代码中的文本。读取函数应该以 s 的形式编写,而不是文本。 count 函数应该用 st 来编写,而不是文本。只要有文本,justify 函数就应该有 str。您尚未表明您了解如何使用字符串参数。

  • #include<stdio.h>
    #include<string.h>
    void read(), justify(char *str, int g);
    int count(char *st);
    int main(){
    char text[100];
    int gaps, i;
    gaps = 0;
    for(i=0; i<3; i++) {
    read(text);
    gaps = count(text);
    justify(text, gaps);
    printf("\n");
    }
    }
    void read(char *s){
    int length;
    printf("Enter a line of text: ");
    gets(s);
    length = strlen(s);
    while(length!=0){
    if(length<46){
    printf("123456789012345678901234567890123456789012345\n");
    length = 0;
    } else {
    printf("Enter a line of text: ");
    gets(s);
    length = strlen(s);
    }
    }
    }
    int count(char *st){
    int num, i, num2;
    num = 0;
    num2 = strlen(st);
    for(i=0; i<num2; i++){
    if(st[i]==' '){
    num++;
    }
    }
    return num;
    }
    void justify(char *str, int g){
    int i, j, num, m, n, temp;
    temp = strlen(str);
    num = 45 - temp;
    m = num / g;
    n = num % g;
    for(i=0; i<temp; i++){
    printf("%c", str[i]);
    if(str[i]==' '){
    for(j=0; j<m; j++){
    printf(" ");
    }
    if(n!=0){
    printf(" ");
    n--;
    }
    }
    }
    printf("\n");
    }

    我想学习如何改进代码并使其正常运行。干杯!

    最佳答案

    关于标题,“默认情况下局部变量中有什么?”

    什么都没有。根据 C 2018 6.7.9 10,“如果具有自动存储持续时间的对象未显式初始化,则其值是不确定的。” (您所认为的“局部变量”是具有自动存储持续时间的对象。)根据 3.19.2,不确定值是未指定的值或陷阱表示。根据 3.19.3,C 标准对在任何情况下选择哪个值没有任何要求。

    考虑:

    int x;
    printf("%d", x);
    printf("%d", x);

    在这两种情况下,printf 可能会打印不同的数字。 x 的值在任何情况下都未指定。程序已损坏。

    此外,6.3.2.1 2 中有一条规则相当于:如果您使用未初始化的局部变量并且其地址从未被获取,则程序的行为不是由 C 标准定义的。这意味着,不仅变量在不同时间看起来有不同的值,而且 C 标准根本没有定义程序的行为。 printf 语句不一定会打印。程序可能会崩溃。该程序可能会调用与您期望的完全不同的例程。 C 标准没有提出任何要求。

    解决方案:通过在声明局部变量时写入 = SomeInitialValue 来初始化局部变量,如 int x = 0; 或通过赋值来初始化它们使用它们之前的值。

    1。问题说只应使用局部变量。

    解决方案:仅使用局部变量。从程序中删除全局变量。如果例程需要来自调用者的数据,请使用参数传递它。

    2。 read 函数应该读取...第 14 行和 15 行...

    您的问题代码中的第 14 行和第 15 行似乎与读取函数中应包含的行不对应。您在问题中添加的代码似乎与导师所指的不同。

    解决方案:准确填写导师在问题中查看的代码。遵循导师的指示。

    3。因为您使用文本作为全局变量...

    请参阅上面的 1. 和 2.。与2.一样,代码与该注释不匹配;您似乎显示了与导师审查的不同的代码。显示问题中的确切代码,并且不要使用全局变量。

    关于c - 默认情况下局部变量中有什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56275464/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com