我有一些代码来添加分数.
#include <stdio.h>
#include <stdlib.h>
struct frac
{
int enumerator;
int denominator;
};
typedef struct frac frac_t;
frac_t *Add(frac_t *b1, frac_t *b2)
{
frac_t rfrac;
frac_t *p;
p = &rfrac;
(*p).enumerator= ((*b1).enumerator* (*b2).denominator) + ((*b2).enumerator* (*b1).denominator);
(*p).denominator= ((*b1).denominator* (*b2).denominator);
return p;
}
int main(void)
{
frac_t b1 = {2,4};
frac_t b2 = {1,7};
frac_t *add = Add(&b1, &b2);
printf("%i %i\n", add->enumerator, add->denominator);
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这完全没问题.结果是:3 5,因为它应该是.
如果我添加"printf",它会完全弄乱我的结果:
int main(void)
{
frac_t b1 = {2,4};
frac_t b2 = {1,7}; …Run Code Online (Sandbox Code Playgroud) 好的,我是从vb.net到c ++.我试图在结构中使用向量,但编译器对我大喊大叫.当前的陈述有什么问题?
#include <vector>
struct FactorSet
{
vector<long long> UpperFactor(0);
vector<long long> LowerFactor(0);
};
Run Code Online (Sandbox Code Playgroud)
输出错误(Visual Studio 2008):
错误1错误C2059:语法错误:'常量'
我冒昧地猜测,我对矢量究竟是什么缺乏了解.在我看来它是一个对象,虽然我认为它的最新名称是模板.像字符串这样的其他对象似乎没有问题.我还假设这也扩展到类定义,因为结构和类是如此相似.
我正在尝试编写一个程序,使用输入重定向将文件中的条目读入动态分配的结构数组中.我的程序编译得很好但是我遇到了分段错误而且我找不到原因.
这是我的计划:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct StudentData
{
char* name;
char* major;
double gpa;
} Student;
int main()
{
Student* data = (Student*)malloc(sizeof(Student)*5);
int i;
for(i = 0; i < 5; i++)
{
// allocate memory for name and read input
data[i].name = malloc(50);
*(data+i)->name == scanf("%s", (char*)&data[i].name);
// allocate memory for major and read input
data[i].major = malloc(30);
*(data+i)->major == scanf("%s", (char*)&data[i].major);
// read input for gpa
(data+i)->gpa == scanf("%lf", &data[i].gpa);
//print array
printf("%s\n%s\n%f\n", data[i].name, …Run Code Online (Sandbox Code Playgroud) 我想将数据结构复制到另一个
struct times{
QString name;
double time1;
double time2;
double time3;
};
/..../
times *abc = new times[10];
times *abc2 = new times[10];
Run Code Online (Sandbox Code Playgroud)
如何在不复制指针的情况下将abc复制到abc2中?
我有一些Python代码如下:
for emailCredentials in emailCredentialsList:
try:
if not emailCredentials.valid:
emailCredentials.refresh()
except EmailCredentialRefreshError as e:
emailCredentials.active = False
emailCredentials.save()
# HERE I WANT TO STOP THIS ITERATION OF THE FOR LOOP
# SO THAT THE CODE BELOW THIS DOESN'T RUN ANYMORE. BUT HOW?
# a lot more code here that scrapes the email box for interesting information
Run Code Online (Sandbox Code Playgroud)
正如我已经在代码中注释的那样,如果EmailCredentialRefreshError抛出,我希望for循环的这个迭代停止并移动到下一个项目emailCredentialsList.我不能使用a,break因为这将停止整个循环,它不会覆盖循环中的其他项目.我当然可以将所有代码包装在try/except中,但我希望将它们保持在一起以便代码保持可读性.
解决这个问题的最恐怖的方法是什么?
我在弄清楚复制指针的语法时遇到了麻烦.
我该怎么做theVar2=theVar?
Struct MyStructureType {
double* theVar2;
}
MyStructureType* myStruct;
double* theVar;
theVar = malloc(sizeof(double));
myStruct->theVar2 = theVar; //segfaults
Run Code Online (Sandbox Code Playgroud) 我在涉及Guice并避免使用非Guice单身人士方面有些两难。考虑那里有3个模块的多模块项目:shared,frontend和backend。无论是frontend与backend使用的一个实例Profiling的类的内部shared模块(其时间的方法,和在整个项目中广泛使用)。
几乎每个类都需要使用此Profiling实例(包括User用户连接时动态创建的对象)。
如果每个单独的类都需要该类的一个实例Profiling,则执行该方法的不同方法会有一些缺点:
解决方案1(在构造函数中,复制到实例字段):
private final Profiling profiling;
@Inject
public User(Profiling profiling, String username)
Run Code Online (Sandbox Code Playgroud)
缺点:您必须Profiling在每个构造函数中都包含一个对象。这很麻烦,而且毫无意义。您还必须Injector静态存储(或注入)Guice ,以便您可以动态创建User对象,而不仅仅是在首次加载程序时。
解决方案2(仅作为实例字段):
@Inject
private Profiling profiling;
public User(String username)
Run Code Online (Sandbox Code Playgroud)
缺点:与上面类似,您必须使用Guice Injector实例化每个对象。这意味着要User动态创建对象,需要在创建User对象的类中使用Injector的实例。
解决方案3(作为一个(主)类中的静态字段,由我们手动创建)
public static final Profiling PROFILING; // Can also use a get method
public Application() {
Application.PROFILING …Run Code Online (Sandbox Code Playgroud) 使用下面显示的结构,我可以像这样使用它.
NMEADecodedSentence s;
auto & gga = s.GGA;
auto alt = gga.Alt;
Run Code Online (Sandbox Code Playgroud)
但是是否可以将对匿名结构的引用传递给函数,例如:
SomeFunc(gga);
Run Code Online (Sandbox Code Playgroud)
如果是这样,函数签名会是什么样的?我的想法是没有你不能没有命名结构,但我只是想知道是否有一些聪明的方式,我不知道!
struct NMEADecodedSentence
{
GNSSSentenceType Type;
GNSSTalkerId TalkerId;
union
{
struct
{
char Time[10]; // UTC time - hhmmss.ss
char Lat[13]; // Latitude (degrees & minutes) - ddmm.mmmmm
char NS; // North/South indicator
char Long[14]; // Longitude (degrees & minutes) - dddmm.mmmmm
char EW; // East/West indicator
uint8_t Quality; // Quality indicator for position fix
uint8_t NumSV; // Number of satellites used (0-12)
float HDOP; // …Run Code Online (Sandbox Code Playgroud) 有一个C结构
struct a
{
int val1,val2;
}
Run Code Online (Sandbox Code Playgroud)
我已经对代码进行了更改
struct b
{
int val2;
}
struct a
{
int val1;
struct b b_obj;
}
Run Code Online (Sandbox Code Playgroud)
现在,在其他C文件中使用val2就像a_obj->val2;.
我想替换它的声明用法,并且它们有很多,所以我在头文件中定义了一个宏,其中struct a定义如下:
#define a_obj->val2 (a_obj->b_obj.val2)
Run Code Online (Sandbox Code Playgroud)
它不起作用.->在宏定义的标识符部分是非法的#define吗?
有人可以告诉我我哪里错了吗?
根据@Basile的建议进行编辑 -
这是一个遗留源代码,一个非常庞大的项目.不确定LOC.
我想做出这样的改变,因为我想让它更模块化.
例如,我想在相同的名称下对结构的类似字段进行分组,这就是我想要创建另一个结构B的原因,该结构B的字段与B功能相关并且也与A共用.
我不能使用其他的查找替换功能文本编辑,我正在使用VIM.
嘿,我只是想寻求有关如何存储4个双打的建议(C语言新手)。是否有一个数组,其中每个数组元素将容纳另一个双精度数组?这会是什么样子。谢谢!