关于C++的一段代码问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C++的一段代码问题相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
struct over50//年龄大于50岁人的结构体

int number;//学号
char name[10];//名字
int score;//分数
a[8];
struct low50//年龄小于50岁人的结构体

int number;//学号
char name[10];//名字
char grade;//分数
b[7];

void output1(struct low50 s[],int n);
void output2(struct over50 t[],int m);
void paixu(struct low50 c[],int n);
main()

int j;
char ch;

printf("please input low50 number,name,score:\n");//打印:请输入小于50岁人的学号名字和分数
for(j=0;j<8;j++)

printf("Please input%d message:\n",j+1);//打印:输入资料

scanf("%d",&a[j].number);//输入
scanf("%s",a[j].name);//输入
scanf("%d",&a[j].score);//输入

printf("Please input over50 number.name.grade:\n");//打印:请输入大于50岁人的学号名字和分数
for(j=0;j<7;j++)

printf("Please input%d message:\n",j+1);//打印输入资料
scanf("%d",&b[j].number);
scanf("%s",b[j].name);
ch=getchar();
scanf("%c",&b[j].grade);

printf("\n number name score(grade)\n");
for(j=0;j<8;j++)
scanf("%d %s %-3d\n",a[j].number,a[j].name,a[j].score);
for(j=0;j<7;j++)
scanf("%d %s %-3d \n",b[j].number,b[j].name,b[j].grade);
printf("Fail message:\n");
output1(b,8);
output2(a,7);
printf("Please input(1or2)select1:paixu\n");
scanf("%d",&j);
if(j==1)
paixu(b,8);

void output1(struct low50 s[],int n)

int i;
for(i=0;i<n;i++)
if(s[i].grade<60)
scanf("%-6d %s \n",s[i].number,s[i].name);

void output2(struct over50 t[],int m)

int i;
for(i=0;i<m;i++)
if(t[i].score=='c')
scanf("%-6d %s \n",t[i].number,t[i].name);

void paixu (struct low50 c[],int n)//小于50岁人的分数从小到大排序

struct low50 zg;
int i,j,min;
printf("\n paixu message:\n");
for(i=0;i<n-1;i++)

min=i;
for(j=i+1;j<n;j++)
if(c[j].grade<c[min].grade)min=j;
if(min!=i)

zg=c[i];c[i]=c[min];c[min]=zg;


printf("\nthe sort array:\n");
for(i=0;i<n;i++)
scanf("%6d %s %6d\n",c[i].number,c[i].name,c[i].grade);


这段代码没写完,可能还有错,请高手帮我把他完成,要求:运行后能输入8个50岁以上的人的资料(考号,名字和成绩)和7个50岁以下的人资料并把所有人的资料打印出来,然后把50岁以下的人的资料按分数的高低从小到大排列出来。输入输出数据要有提示,还有要注释!就在我的代码修改完成!写的好的我另外加50分!!
题目的要求在代码的最后!有问题的请提出来!

#include<stdio.h>
struct over50//年龄大于50岁人的结构体

int number;//学号
char name[10];//名字
int score;//分数
a[8];
struct low50//年龄小于50岁人的结构体

int number;//学号
char name[10];//名字
char grade;//分数
b[7];

void output1(struct low50 s[],int n);
void output2(struct over50 t[],int m);
void paixu(struct low50 c[],int n);
main()

int j;
//int ch;

printf("please input over50 number,name,score:\n");//打印:请输入小于50岁人的学号名字和分数
for(j=0;j<8;j++)

printf("Please input%d message:\n",j+1);//打印:输入资料

scanf("%d",&a[j].number);//输入
scanf("%s",a[j].name);//输入
scanf("%d",&a[j].score);//输入

printf("Please input low50 number.name.grade:\n");//打印:请输入大于50岁人的学号名字和分数
for(j=0;j<7;j++)

printf("Please input%d message:\n",j+1);//打印输入资料
//scanf("%d %s %d",&b[j].number,b[j].name,&b[j].grade);
scanf("%d",&b[j].number);//输入
//scanf("%s",b[j].name);//输入
//scanf("%d",&b[j].grade);//输入
scanf("%s%*c%c",b[j].name,&b[j].grade);//你试试


/* printf("\n number name score(grade)\n"); //////这部分去掉吧,没啥用吧
for(j=0;j<8;j++)
scanf("%d %s %-3d\n",a[j].number,a[j].name,a[j].score);
for(j=0;j<7;j++)
scanf("%d %s %-3d \n",b[j].number,b[j].name,b[j].grade); */
printf("Fail message:\n");
output1(b,7); //输出年龄小于50的所有人中分数为c的信息///这里是7
output2(a,8); //输出年龄大于50的所有人中不及格的信息//这里是8
printf("Please input(1or2)select1:paixu\n");
scanf("%d",&j); //j等于1时进行排序
if(j==1)
paixu(b,7); ////这里是7

return 0;

void output1(struct low50 s[],int n)

int i;
for(i=0;i<n;i++)
if(s[i].grade=='c')
printf("%-6d %s \n",s[i].number,s[i].name); /////这里是printf

void output2(struct over50 t[],int m)

int i;
for(i=0;i<m;i++)
if(t[i].score<60)
printf("%-6d %s \n",t[i].number,t[i].name); /////这里是printf

void paixu (struct low50 c[],int n)//小于50岁人的分数从小到大排序

struct low50 zg;
int i,j,min;
printf("\n paixu message:\n");
for(i=0;i<n-1;i++)

min=i;
for(j=i+1;j<n;j++)
if(c[j].grade>c[min].grade)min=j; //如果有比当前的学生的成绩低的,就把低的坐标赋给min
if(min!=i) //若min不等于i,将坐标为i,min的结构体进行互换

zg=c[i];c[i]=c[min];c[min]=zg;


printf("\nthe sort array:\n");
for(i=0;i<n;i++)
printf("%6d %s %c\n",c[i].number,c[i].name,c[i].grade); /////这里是printf
参考技术A 你写得很糟糕,并且没有c++的风格.我采用c++的风格重新把你的要求实现了一遍:
#include<iostream>
#include<string>
using namespace std;

struct over50

char no[10];//学号
char name[20];//姓名
float score;//分数
a[8];

struct low50

char no[10];//学号
char name[20];//姓名
float score;//分数
b[7];

void sort_low50(struct low50 *);//给数组b[7]按成绩从小到大排序

int main()

int i;
cout<<"请输入8个50岁以上的人的资料:"<<endl;//输入8个人的资料
for(i=0;i<8;i++)

cout<<"第"<<i+1<<"个:";
cin>>a[i].no>>a[i].name>>a[i].score;


cout<<"请输入7个50岁以下的人的资料:"<<endl;//输入7个人的资料
for(i=0;i<7;i++)

cout<<"第"<<i+1<<"个:";
cin>>b[i].no>>b[i].name>>b[i].score;


cout<<"8个50岁以上的人的资料如下:"<<endl;//显示8个人的资料
cout<<"学号\t"<<"姓名\t"<<"分数"<<endl;
for(i=0;i<8;i++)
cout<<a[i].no<<"\t"<<a[i].name<<"\t"<<a[i].score<<endl;

cout<<"7个50岁以下的人的资料如下:"<<endl;//显示7个人的资料
cout<<"学号\t"<<"姓名\t"<<"分数"<<endl;
for(i=0;i<7;i++)
cout<<b[i].no<<"\t"<<b[i].name<<"\t"<<b[i].score<<endl;

sort_low50(b);//给7个人的资料排序
cout<<"7个50岁以下的人的资料按成绩从小到大为:"<<endl;//输出排序后7个人的资料
cout<<"学号\t"<<"姓名\t"<<"分数"<<endl;
for(i=0;i<7;i++)
cout<<b[i].no<<"\t"<<b[i].name<<"\t"<<b[i].score<<endl;

return 1;


void sort_low50(struct low50 *b)//采用的排序算法为冒泡排序法

int i,j;
for(i=0;i<6;i++)
for(j=i+1;j<7;j++)
if(b[i].score>b[j].score)

char temp1[10];
char temp2[10];
float temp3;
strcpy(temp1,b[i].no);strcpy(b[i].no,b[j].no);strcpy(b[j].no,temp1);
strcpy(temp2,b[i].name);strcpy(b[i].name,b[j].name);strcpy(b[j].name,temp2);
temp3=b[i].score;b[i].score=b[j].score;b[j].score=temp3;


验证通过!
参考技术B 先去上课,回来没人做我来做

将一段 C++ 代码包装成 Python

【中文标题】将一段 C++ 代码包装成 Python【英文标题】:Wrapping a piece of C++ code into Python 【发布时间】:2012-03-06 14:54:07 【问题描述】:

我有一段生成数据的 C++ 代码。我想将数据公开给 Python。但这并不像听起来那么琐碎……

假设这个 C++ 编译成二进制文件cppcode。由于框架搭建的方式比较复杂,我只能将代码运行为

./cppcode command line arguments 

在 cppcode 内部,它会生成我想从 Python 访问的数据。我知道我是否可以以某种方式将程序重写为

CppClass cpp; 
cpp.run( args );

然后我可以用 Boost Python 封装 CppClass,构建一个实例,使用参数运行,并访问生成中的数据。

但现在我只能以./cppcode command line arguments 运行代码

我不能只从 Python 中调用./cppcode,因为在 ./cppcode 完成后,它的内存将被系统重新收集,我再也无法从 Python 中看到它了。有没有办法解决这个问题?

我能想到:(1)让./cppcode把数据转储到磁盘,让python读取。 (2) 将数据转储到标准输出并通过管道传输到 python 脚本中。但无论哪种方式,我都必须在 Python 中进行一些可能很慢的字符串解析。有没有办法绕过它?

【问题讨论】:

我会先选择(2),这应该很简单,因为您可以控制数据的格式。只需以逗号分隔值之类的简单格式输出,可以使用string.split() 快速解析。如果结果太慢,我会考虑使用 Boost Python 之类的东西,这将需要更多的工作来实现。 请通过回馈社区来感谢我们。 @NiklasB.:逗号分隔的值比这更复杂一些,因为它们可能包含包含逗号的字符串。 Python 确实有一个 csv 模块,它可以很好地处理这个问题。 我同意 NiklasB。 Unix 是为管道设计的,而 Python 是为字符串解析而设计的。两者都非常快。编写代码来做到这一点应该不难。我会这样做,如果速度不够快,请考虑使用更快的数据传输方法。 @mathieau:对不起,我不是指完整的 CSV 文件格式...对于简单的数据,您不需要引号转义之类的东西,因此您可以在逗号处拆分。当然,取决于数据的类型。也许如果输出涉及复杂的字符串(或者只是包含逗号的字符串),可以使用另一种分隔符,如\n 来避免问题(当然,假设字符串不包含换行符)。 【参考方案1】:

您可以将 ccpcode 中的 JSON 格式的数据转储到磁盘上,然后简单地使用 python 中的 simplejson 来解析它。这样您就不必编写任何自己的解析器了。

以下是 C++ JSON 模块的一些示例:https://***.com/questions/245973/whats-the-best-c-json-parser

【讨论】:

以上是关于关于C++的一段代码问题的主要内容,如果未能解决你的问题,请参考以下文章

关于线程的synchronized,wait,sleep,notify的一段有趣的代码

一段递归代码引发的对于传参以及关于基本类型的一点了解

关于poc脚本的一些问题

关于c++文件流读入和写入的问题

关于C++的多态实现机理问题

将一段 C++ 代码包装成 Python