- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我为学校编写了这个程序,但即使它完成了,dev-cpp 最后也会给我一个 SIGSEGV 错误。通过在谷歌上搜索,我发现我的问题可能来自与我的结构中的字符绑定(bind)的所有内容。我正在尝试用 sprintf 在我的 char nom[10] 和 char nom_team[10] 上写。我这样做是因为我想为默认的“玩家”名称添加一个数字,如下所示:玩家 1,玩家 2,...
我不确切地知道我试图在我不拥有的内存上写什么。我也不知道有什么其他方法可以实现播放器 1、播放器 2...。
谢谢你的帮助。
编辑(完整代码并根据 Michael Walz 评论进行编辑)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct player player; //shortened Perso type
typedef struct team Team; //shortened Team type
struct player //perso structure
{
char name[10]; //player name
int HP; //healt points
int ATK; //attack points
int DEF; //defense points
};
struct team //team structure
{
char name_team[10]; //team name
player player[5]; //players in the team
int nbrP; //number of players left
};
void init_player (player*); //player initialisation
void fight (player*,player*); //damage calculation
int HPP (player*,player*); //players duel simulation
void init_team (Team*); //team initialisation
char* TvT (Team*,Team*); //team combat simulation
main() //main
{
srand(time(NULL));
int i;
char* wint; //winning team name string
Team t[2]; //the 2 teams
for (i=1;i<3;i++)
{
init_team (&t[i]); //teams initialisation
}
//changing team names
sprintf(t[1].name_team,"%s","Orange");
sprintf(t[2].name_team,"%s","Verte");
//changing players names
sprintf(t[1].player[0].name,"%s","Gerald");
sprintf(t[1].player[1].name,"%s","Ilda");
sprintf(t[1].player[2].name,"%s","Falion");
sprintf(t[1].player[3].name,"%s","Thor");
sprintf(t[1].player[4].name,"%s","Ralof");
sprintf(t[2].player[0].name,"%s","Gandalf");
sprintf(t[2].player[1].name,"%s","Jaena");
sprintf(t[2].player[2].name,"%s","Philip");
sprintf(t[2].player[3].name,"%s","Astrid");
sprintf(t[2].player[4].name,"%s","Ponchaut");
wint = TvT (&t[1],&t[2]); //wint is the result of the combat between the two teams
printf("%s\n",wint);
}
void init_player (player* p) //player initialisation
{
static int i=1; //static variable for player number
sprintf(p->name,"player %d",i); //applying player name
p->HP = 100 + rand()%10; //giving HP
p->ATK = 10 + rand()%10; //giving ATK
p->DEF = 5 + rand()%5; //giving DEF
printf("name : %s\n",p->name);
printf("HP : %d\n",p->HP);
printf("ATK : %d\n",p->ATK);
printf("DEF : %d\n",p->DEF);
printf("\n");
//showing player stats
i++; //next player number
}
void fight (player *p1,player *p2) //damage calculation
{
int DAM;
DAM = p1->ATK - p2->DEF; //simple damage calculation
printf("DAM : %d\n",DAM); //showing damage done
p2->HP = p2->HP - DAM; //applying damage
}
int HPP (player *p1,player *p2) //players duel simulation
{
int turnp; //turns of the duel
for (turnp=1;p1->HP>0 && p2->HP>0;turnp++) //continues while players are alive
{
printf("HP p1 : %d\n",p1->HP); //showing hp before combat
printf("HP p2 : %d\n",p2->HP);
if(turnp%2 != 0) fight (p1,p2); //p1 always begin
else fight (p2,p1); //then it's p2's turn to attack
}
if (p1->HP<=0) return 2; //p2 is the winner if p1 dies
else return 1; //p1 is the winner is p2 dies
}
void init_team (Team* t) //team initialisation
{
int i;
static int k=1; //static variable for team number
sprintf(t->name_team,"team %d",k); //applying team name
t->nbrP = 5; //defining number of players left in team at the start
for (i=0;i<5;i++)
{
init_player(&t->player[i]); //initializing players in team
}
k++; //next team number
}
char* TvT (Team* t1, Team* t2) //team combat simulation
{
int turnt,winp; //team combat turns and duel winner variables
int i=0,j=0;
for (turnt=1;t1->nbrP>0 && t2->nbrP>0;turnt++) //continues while the teams have at least one player left alive
{
printf("%s de la team %s contre %s de la team %s\n",t1->player[i].name,t1->name_team,t2->player[j].name,t2->name_team);
//introduction message to next duel
winp = HPP (&t1->player[i],&t2->player[j]); //simulating duel, the result is stored in winp
if (winp == 1)
{
(t2->nbrP)--; //if player in team 2 dies we decrement the number of players left in that team
j++; //we order the next player in the team 2 to duel
}
else
{
(t1->nbrP)--; ///if player in team 1 dies we decrement the number of players left in that team
i++; //we order the next player in the team 1 to duel
}
}
if(t1->nbrP<=0) return t2->name_team; //if team 1 loses we return team 2's name
else return t1->name_team; //if team 2 loses we return team 1's name
}
注意:当我把
char name[100]
和
char name_team[100]
我只有这个
name : player 1
HP : 103
ATK : 19
DEF : 9
name : player 2
HP : 100
ATK : 12
DEF : 6
name : player 3
HP : 107
ATK : 12
DEF : 8
name : player 4
HP : 101
ATK : 19
DEF : 6
name : player 5
HP : 108
ATK : 17
DEF : 8
--------------------------------
Process exited after 2.507 seconds with return value 3221225477
Appuyez sur une touche pour continuer...
我想要的结果是这样的(除了当 t2 获胜时在“Verte”的底部写上“@■b”:
name : player 1
HP : 109
ATK : 14
DEF : 9
name : player 2
HP : 106
ATK : 12
DEF : 8
name : player 3
HP : 106
ATK : 17
DEF : 8
name : player 4
HP : 100
ATK : 11
DEF : 8
name : player 5
HP : 103
ATK : 12
DEF : 9
name : player 6
HP : 106
ATK : 12
DEF : 6
name : player 7
HP : 105
ATK : 13
DEF : 7
name : player 8
HP : 107
ATK : 19
DEF : 7
name : player 9
HP : 100
ATK : 16
DEF : 8
name : player 10
HP : 105
ATK : 11
DEF : 9
Gerald de la team Orange contre Gandalf de la team Verte
HP p1 : 109
HP p2 : 106
DAM : 8
HP p1 : 109
HP p2 : 98
DAM : 3
HP p1 : 106
HP p2 : 98
DAM : 8
HP p1 : 106
HP p2 : 90
DAM : 3
HP p1 : 103
HP p2 : 90
DAM : 8
HP p1 : 103
HP p2 : 82
DAM : 3
HP p1 : 100
HP p2 : 82
DAM : 8
HP p1 : 100
HP p2 : 74
DAM : 3
HP p1 : 97
HP p2 : 74
DAM : 8
HP p1 : 97
HP p2 : 66
DAM : 3
HP p1 : 94
HP p2 : 66
DAM : 8
HP p1 : 94
HP p2 : 58
DAM : 3
HP p1 : 91
HP p2 : 58
DAM : 8
HP p1 : 91
HP p2 : 50
DAM : 3
HP p1 : 88
HP p2 : 50
DAM : 8
HP p1 : 88
HP p2 : 42
DAM : 3
HP p1 : 85
HP p2 : 42
DAM : 8
HP p1 : 85
HP p2 : 34
DAM : 3
HP p1 : 82
HP p2 : 34
DAM : 8
HP p1 : 82
HP p2 : 26
DAM : 3
HP p1 : 79
HP p2 : 26
DAM : 8
HP p1 : 79
HP p2 : 18
DAM : 3
HP p1 : 76
HP p2 : 18
DAM : 8
HP p1 : 76
HP p2 : 10
DAM : 3
HP p1 : 73
HP p2 : 10
DAM : 8
HP p1 : 73
HP p2 : 2
DAM : 3
HP p1 : 70
HP p2 : 2
DAM : 8
Gerald de la team Orange contre Jaena de la team Verte
HP p1 : 70
HP p2 : 105
DAM : 7
HP p1 : 70
HP p2 : 98
DAM : 4
HP p1 : 66
HP p2 : 98
DAM : 7
HP p1 : 66
HP p2 : 91
DAM : 4
HP p1 : 62
HP p2 : 91
DAM : 7
HP p1 : 62
HP p2 : 84
DAM : 4
HP p1 : 58
HP p2 : 84
DAM : 7
HP p1 : 58
HP p2 : 77
DAM : 4
HP p1 : 54
HP p2 : 77
DAM : 7
HP p1 : 54
HP p2 : 70
DAM : 4
HP p1 : 50
HP p2 : 70
DAM : 7
HP p1 : 50
HP p2 : 63
DAM : 4
HP p1 : 46
HP p2 : 63
DAM : 7
HP p1 : 46
HP p2 : 56
DAM : 4
HP p1 : 42
HP p2 : 56
DAM : 7
HP p1 : 42
HP p2 : 49
DAM : 4
HP p1 : 38
HP p2 : 49
DAM : 7
HP p1 : 38
HP p2 : 42
DAM : 4
HP p1 : 34
HP p2 : 42
DAM : 7
HP p1 : 34
HP p2 : 35
DAM : 4
HP p1 : 30
HP p2 : 35
DAM : 7
HP p1 : 30
HP p2 : 28
DAM : 4
HP p1 : 26
HP p2 : 28
DAM : 7
HP p1 : 26
HP p2 : 21
DAM : 4
HP p1 : 22
HP p2 : 21
DAM : 7
HP p1 : 22
HP p2 : 14
DAM : 4
HP p1 : 18
HP p2 : 14
DAM : 7
HP p1 : 18
HP p2 : 7
DAM : 4
HP p1 : 14
HP p2 : 7
DAM : 7
Gerald de la team Orange contre Philip de la team Verte
HP p1 : 14
HP p2 : 107
DAM : 7
HP p1 : 14
HP p2 : 100
DAM : 10
HP p1 : 4
HP p2 : 100
DAM : 7
HP p1 : 4
HP p2 : 93
DAM : 10
Ilda de la team Orange contre Philip de la team Verte
HP p1 : 106
HP p2 : 93
DAM : 5
HP p1 : 106
HP p2 : 88
DAM : 11
HP p1 : 95
HP p2 : 88
DAM : 5
HP p1 : 95
HP p2 : 83
DAM : 11
HP p1 : 84
HP p2 : 83
DAM : 5
HP p1 : 84
HP p2 : 78
DAM : 11
HP p1 : 73
HP p2 : 78
DAM : 5
HP p1 : 73
HP p2 : 73
DAM : 11
HP p1 : 62
HP p2 : 73
DAM : 5
HP p1 : 62
HP p2 : 68
DAM : 11
HP p1 : 51
HP p2 : 68
DAM : 5
HP p1 : 51
HP p2 : 63
DAM : 11
HP p1 : 40
HP p2 : 63
DAM : 5
HP p1 : 40
HP p2 : 58
DAM : 11
HP p1 : 29
HP p2 : 58
DAM : 5
HP p1 : 29
HP p2 : 53
DAM : 11
HP p1 : 18
HP p2 : 53
DAM : 5
HP p1 : 18
HP p2 : 48
DAM : 11
HP p1 : 7
HP p2 : 48
DAM : 5
HP p1 : 7
HP p2 : 43
DAM : 11
Falion de la team Orange contre Philip de la team Verte
HP p1 : 106
HP p2 : 43
DAM : 10
HP p1 : 106
HP p2 : 33
DAM : 11
HP p1 : 95
HP p2 : 33
DAM : 10
HP p1 : 95
HP p2 : 23
DAM : 11
HP p1 : 84
HP p2 : 23
DAM : 10
HP p1 : 84
HP p2 : 13
DAM : 11
HP p1 : 73
HP p2 : 13
DAM : 10
HP p1 : 73
HP p2 : 3
DAM : 11
HP p1 : 62
HP p2 : 3
DAM : 10
Falion de la team Orange contre Astrid de la team Verte
HP p1 : 62
HP p2 : 100
DAM : 9
HP p1 : 62
HP p2 : 91
DAM : 8
HP p1 : 54
HP p2 : 91
DAM : 9
HP p1 : 54
HP p2 : 82
DAM : 8
HP p1 : 46
HP p2 : 82
DAM : 9
HP p1 : 46
HP p2 : 73
DAM : 8
HP p1 : 38
HP p2 : 73
DAM : 9
HP p1 : 38
HP p2 : 64
DAM : 8
HP p1 : 30
HP p2 : 64
DAM : 9
HP p1 : 30
HP p2 : 55
DAM : 8
HP p1 : 22
HP p2 : 55
DAM : 9
HP p1 : 22
HP p2 : 46
DAM : 8
HP p1 : 14
HP p2 : 46
DAM : 9
HP p1 : 14
HP p2 : 37
DAM : 8
HP p1 : 6
HP p2 : 37
DAM : 9
HP p1 : 6
HP p2 : 28
DAM : 8
Thor de la team Orange contre Astrid de la team Verte
HP p1 : 100
HP p2 : 28
DAM : 3
HP p1 : 100
HP p2 : 25
DAM : 8
HP p1 : 92
HP p2 : 25
DAM : 3
HP p1 : 92
HP p2 : 22
DAM : 8
HP p1 : 84
HP p2 : 22
DAM : 3
HP p1 : 84
HP p2 : 19
DAM : 8
HP p1 : 76
HP p2 : 19
DAM : 3
HP p1 : 76
HP p2 : 16
DAM : 8
HP p1 : 68
HP p2 : 16
DAM : 3
HP p1 : 68
HP p2 : 13
DAM : 8
HP p1 : 60
HP p2 : 13
DAM : 3
HP p1 : 60
HP p2 : 10
DAM : 8
HP p1 : 52
HP p2 : 10
DAM : 3
HP p1 : 52
HP p2 : 7
DAM : 8
HP p1 : 44
HP p2 : 7
DAM : 3
HP p1 : 44
HP p2 : 4
DAM : 8
HP p1 : 36
HP p2 : 4
DAM : 3
HP p1 : 36
HP p2 : 1
DAM : 8
HP p1 : 28
HP p2 : 1
DAM : 3
Thor de la team Orange contre Ponchaut de la team Verte
HP p1 : 28
HP p2 : 105
DAM : 2
HP p1 : 28
HP p2 : 103
DAM : 3
HP p1 : 25
HP p2 : 103
DAM : 2
HP p1 : 25
HP p2 : 101
DAM : 3
HP p1 : 22
HP p2 : 101
DAM : 2
HP p1 : 22
HP p2 : 99
DAM : 3
HP p1 : 19
HP p2 : 99
DAM : 2
HP p1 : 19
HP p2 : 97
DAM : 3
HP p1 : 16
HP p2 : 97
DAM : 2
HP p1 : 16
HP p2 : 95
DAM : 3
HP p1 : 13
HP p2 : 95
DAM : 2
HP p1 : 13
HP p2 : 93
DAM : 3
HP p1 : 10
HP p2 : 93
DAM : 2
HP p1 : 10
HP p2 : 91
DAM : 3
HP p1 : 7
HP p2 : 91
DAM : 2
HP p1 : 7
HP p2 : 89
DAM : 3
HP p1 : 4
HP p2 : 89
DAM : 2
HP p1 : 4
HP p2 : 87
DAM : 3
HP p1 : 1
HP p2 : 87
DAM : 2
HP p1 : 1
HP p2 : 85
DAM : 3
Ralof de la team Orange contre Ponchaut de la team Verte
HP p1 : 103
HP p2 : 85
DAM : 3
HP p1 : 103
HP p2 : 82
DAM : 2
HP p1 : 101
HP p2 : 82
DAM : 3
HP p1 : 101
HP p2 : 79
DAM : 2
HP p1 : 99
HP p2 : 79
DAM : 3
HP p1 : 99
HP p2 : 76
DAM : 2
HP p1 : 97
HP p2 : 76
DAM : 3
HP p1 : 97
HP p2 : 73
DAM : 2
HP p1 : 95
HP p2 : 73
DAM : 3
HP p1 : 95
HP p2 : 70
DAM : 2
HP p1 : 93
HP p2 : 70
DAM : 3
HP p1 : 93
HP p2 : 67
DAM : 2
HP p1 : 91
HP p2 : 67
DAM : 3
HP p1 : 91
HP p2 : 64
DAM : 2
HP p1 : 89
HP p2 : 64
DAM : 3
HP p1 : 89
HP p2 : 61
DAM : 2
HP p1 : 87
HP p2 : 61
DAM : 3
HP p1 : 87
HP p2 : 58
DAM : 2
HP p1 : 85
HP p2 : 58
DAM : 3
HP p1 : 85
HP p2 : 55
DAM : 2
HP p1 : 83
HP p2 : 55
DAM : 3
HP p1 : 83
HP p2 : 52
DAM : 2
HP p1 : 81
HP p2 : 52
DAM : 3
HP p1 : 81
HP p2 : 49
DAM : 2
HP p1 : 79
HP p2 : 49
DAM : 3
HP p1 : 79
HP p2 : 46
DAM : 2
HP p1 : 77
HP p2 : 46
DAM : 3
HP p1 : 77
HP p2 : 43
DAM : 2
HP p1 : 75
HP p2 : 43
DAM : 3
HP p1 : 75
HP p2 : 40
DAM : 2
HP p1 : 73
HP p2 : 40
DAM : 3
HP p1 : 73
HP p2 : 37
DAM : 2
HP p1 : 71
HP p2 : 37
DAM : 3
HP p1 : 71
HP p2 : 34
DAM : 2
HP p1 : 69
HP p2 : 34
DAM : 3
HP p1 : 69
HP p2 : 31
DAM : 2
HP p1 : 67
HP p2 : 31
DAM : 3
HP p1 : 67
HP p2 : 28
DAM : 2
HP p1 : 65
HP p2 : 28
DAM : 3
HP p1 : 65
HP p2 : 25
DAM : 2
HP p1 : 63
HP p2 : 25
DAM : 3
HP p1 : 63
HP p2 : 22
DAM : 2
HP p1 : 61
HP p2 : 22
DAM : 3
HP p1 : 61
HP p2 : 19
DAM : 2
HP p1 : 59
HP p2 : 19
DAM : 3
HP p1 : 59
HP p2 : 16
DAM : 2
HP p1 : 57
HP p2 : 16
DAM : 3
HP p1 : 57
HP p2 : 13
DAM : 2
HP p1 : 55
HP p2 : 13
DAM : 3
HP p1 : 55
HP p2 : 10
DAM : 2
HP p1 : 53
HP p2 : 10
DAM : 3
HP p1 : 53
HP p2 : 7
DAM : 2
HP p1 : 51
HP p2 : 7
DAM : 3
HP p1 : 51
HP p2 : 4
DAM : 2
HP p1 : 49
HP p2 : 4
DAM : 3
HP p1 : 49
HP p2 : 1
DAM : 2
HP p1 : 47
HP p2 : 1
DAM : 3
Orange
--------------------------------
Process exited after 5.682 seconds with return value 3221225477
Appuyez sur une touche pour continuer...
在任何一种情况下,当我使用 dev-cpp 编译并运行程序时,windows 告诉我它在完成所有操作后崩溃了。当我使用 debug with -g argument
最后我收到 SIGSEGV 错误。
注意 2:我们还没有学习 snprintf,所以我不能使用这个命令;没有实际输入;关于给出 SIGSEGV 错误的那一行,我不知道如何让 dev-cpp 说出它是哪一行,我唯一的方法是将代码块变成注释(显然保留一个可编译的程序)直到错误消失,我引导我到这一行:
sprintf(p->name,"player %d",i); //applying player name
最佳答案
你的 Team
数组有 2 个元素,但您将内容放入索引 1 和 2。C 中的数组是从零开始的 - 第一个元素是 [0]
, 所以你想使用元素 [0]
和 [1]
相反:
Team t[2];
...
sprintf(t[0].name_team,"%s","Orange");
sprintf(t[1].name_team,"%s","Verte");
...
// etc - change all t[1] references to t[0], and all t[2] references to t[1]
同时更改您的 for
循环到 for (i=0;i<2;i++)
.
当您写入索引时 [2]
,您正在覆盖不属于您的内存并破坏堆栈。
关于c - 如何使用 sprintf 写入结构中的 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43913796/
我有这个代码 var myChart = new FusionCharts("../themes/clean/charts/hbullet.swf", "myChartId", "400", "75
既然写入是立即进行的(复制到内核缓冲区并返回),那么使用 io_submit 进行写入有什么好处? 事实上,它 (aio/io_submit) 看起来更糟,因为您必须在堆上分配写入缓冲区并且不能使用基
我正在使用 mootool 的 Request.JSON 从 Twitter 检索推文。收到它后,我将写入目标 div 的 .innerHTML 属性。当我在本地将其作为文件进行测试时,即 file:
最终,我想将 Vertica DB 中的数据抓取到 Spark 中,训练机器学习模型,进行预测,并将这些预测存储到另一个 Vertica DB 中。 当前的问题是确定流程最后部分的瓶颈:将 Spark
我使用 WEKA 库编写了一个 Java 程序, 训练分类算法 使用经过训练的算法对未标记的数据集运行预测 将结果写入 .csv 文件 问题在于它当前写出离散分类结果(即算法猜测一行属于哪个类别)。我
背景 - 我正在考虑使用 clickonce 通过 clickonce(通过网站)部署 WinForms 应用程序。相对简单的应用程序的要素是: - 它是一个可执行文件和一个数据库文件(sqlite)
是否有更好的解决方案来快速初始化 C 数组(在堆上创建)?就像我们使用大括号一样 double** matrix_multiply(const double **l_matrix, const dou
我正在读取 JSON 文件,取出值并进行一些更改。 基本上我向数组添加了一些值。之后我想将其写回到文件中。当我将 JSONArray 写回文件时,会被写入字符串而不是 JSONArray 对象。怎样才
我为两个应用程序使用嵌入式数据库,其中一个是服务器,另一个是客户端。客户端应用程序。可以向服务器端发送获取数据请求以检索数据并显示在表格(或其他)中。问题是这样的:如何将获取的数据保存(写入)到页面文
是否有更好的解决方案来快速初始化 C 数组(在堆上创建)?就像我们使用大括号一样 double** matrix_multiply(const double **l_matrix, const dou
从问题得出问题:找到所有 result = new ArrayList(); for (int i = 2; i >(i%8) & 0x1) == 0) { result.add(i
由于某种原因,它没有写入 CSV。谁能明白为什么它不写吗? def main(): list_of_emails = read_email_csv() #read input file, cr
关闭。 这个问题是 not reproducible or was caused by typos 。它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能在这里出现,
我目前正在开发一个保存和加载程序,但我无法获得正确的结果。 编写程序: #include #include #define FILENAME "Save" #define COUNT 6 type
import java.io.*; public class Main2 { public static void main(String[] args) throws Exception {
我需要使用预定义位置字符串“Office”从所有日历中检索所有 iOS 事件,然后将结果写入 NSLog 和 UITextView。 到目前为止,这是我的代码: #import "ViewCo
我正在尝试将 BOOL 值写入 PFInstallation 中的列,但会不停地崩溃: - (IBAction)pushSwitch:(id)sender { NSUserDefaults *push
我以前在学校学过一些简单的数据库编程,但现在我正在尝试学习最佳实践,因为我正在编写更复杂的应用程序。写入 MySQL 数据库并不难,但我想知道让分布式应用程序写入 Amazon EC2 上的远程数据库
是否可以写回到ResourceBundle?目前我正在使用 ResourceBundle 来存储信息,在运行时使用以下内容读取信息 while(ResourceBundle.getBundle("bu
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我是一名优秀的程序员,十分优秀!