- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经完成了学校作业,我尝试根据导师的评论来修改它。然而,在我的导师最新的电子邮件中,他指出“如果不进行这种更改就可以工作,那是幸运的。对于局部变量,默认情况下你不知道它们里面有什么。”我只是不知道我的代码中的默认值是什么
这是我的导师的评论: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;
或通过赋值来初始化它们使用它们之前的值。
解决方案:仅使用局部变量。从程序中删除全局变量。如果例程需要来自调用者的数据,请使用参数传递它。
您的问题代码中的第 14 行和第 15 行似乎与读取函数中应包含的行不对应。您在问题中添加的代码似乎与导师所指的不同。
解决方案:准确填写导师在问题中查看的代码。遵循导师的指示。
请参阅上面的 1. 和 2.。与2.一样,代码与该注释不匹配;您似乎显示了与导师审查的不同的代码。显示问题中的确切代码,并且不要使用全局变量。
关于c - 默认情况下局部变量中有什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56275464/
我收到此错误消息: .rvm/gems/ruby-2.5.1/bin/ruby_executable_hooks:24:in `' 我重新安装了 Ruby rvm reinstall ruby-2.5
我开始从事 WPF Ribbon 开发,非常好! 我的问题是找到(免费)基本图标(如文件保存/打开/等,剪切/粘贴/等)。 你有什么建议吗? 最佳答案 你看过Visual Studio Icon Li
我只找到经典的声音ID,但我需要Chord(默认)日历警报。如何播放声音? ks #define systemSoundID 1315 AudioServicesPlaySystemSound (s
在 Magento 中创建货件时,有一个复选框可让您“通过电子邮件发送货件副本”。 默认情况下未选中。有谁知道我需要编辑哪个文件才能默认设置为“选中”? 最佳答案 这是一个app/design/adm
我有一个简单的 IValueConverter,它只使用 TypeConverter 进行转换。但是,在某些情况下,提供的 TypeConverter 会失败。 如果转换器未提供 Binding,我想
我正在阅读教程,默认 Activity 是一个扩展另一个类的类,它所拥有的只是一个覆盖方法。应用程序如何工作,因为它不做任何其他事情?我很困惑! 最佳答案 父类 Activity 为您处理一切。 关于
我刚刚开始研究游戏框架。我正在尝试构建 rest api,并将 postgresql 用于我的数据库连接。这是我第一次同时使用 play 和 postgre。我在 build.sbt 中建立了一个数据
是否可以创建具有以下属性的 python 对象: class Foo: def __default_method__(x): return x f = Foo() f(10) > 10
我是 jQuery 的新手,遇到了一个烦人的问题。我有一些登录字段,当该字段为空时会填充默认文本,然后在单击时删除。 我的问题是,当用户保存了他们的用户名/密码(使用浏览器)时,如果他们返回页面,登录
考虑这个代码片段: void Foo(std::string str1, std::string str2) {} template void Bar() { Foo(Types{}...);
我正在编写一个简单的 C 程序,我应该用缓冲区溢出来攻击它。所以,我不想在编译时使用任何标志。如何消除使用的默认标志? # readelf -p .GCC.command.line stack Str
考虑这个代码片段: void Foo(std::string str1, std::string str2) {} template void Bar() { Foo(Types{}...);
我有以下代码[这是一道面试题]: #include #include using namespace std; class A{ public: A(){ cout co
我想在 Autofac 中为每个匹配的生命周期范围注册创建一个实例,但偶尔需要从全局容器(没有匹配的生命周期范围)请求一个实例。在不存在匹配生命周期范围的情况下,我想给出一个顶级实例而不是抛出异常。
我正在做一个收集单词共现的修改版本,所以我编写了自己的 javascript,我正在跟踪三个对象中的出现。但是,一旦对象变大(约 800 万、300 万和 172000),每 100000 个句子需要
我正在使用 pykalman 模块中的 KalmanFilter,我想知道它如何处理缺失的观察结果。根据文档: In real world systems, it is common to have
我有一个应用了 RenderTransform 的 Canvas ,如下所示: 谁能告诉我这些值是什么意思?我似乎无法找到用于解析这些值的转换器。 最佳答案 如 RenderTransform是 T
我是 Linux 的新手,现在使用 CentOS 6。我在这里使用 MySQL 工作台,每当我尝试添加新连接时,它都会询问我默认的 key 环密码。我真的不知道,这个密码是从哪里设置的,我之前没有设置
我在 Ubuntu 18.04 上工作。我没有定义 GL_GLEXT_PROTOTYPES .我使用 glXGetProcAddress 加载“核心”OpenGL 函数.我的申请链接到 /usr/li
我按照文档中的示例添加了对使用 asio 加载 HTTPS 站点的支持,这意味着我调用 ctx.set_default_verify_paths();使用系统默认路径来查找证书。 然而,我得到:una
我是一名优秀的程序员,十分优秀!