- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是编程新手,尤其是 C 语言;只是想挠痒痒。
尝试使用 ncurses 做一个 ASCII 艺术人做跳跃,在过去的三天里尝试过,但我只是没有得到 C 中的“字符串”(我知道字符串并不是真正的 C 概念,只是字符数组),我并没有真正获得指针,也没有真正获得指向字符数组的指针等。
原谅艺术;这只是一个概念证明。
此时我并不想制作动画(甚至使用 ncurses)(这部分很简单);我只是想弄清楚如何使用数组来存储我的动画帧(尽管我愿意接受其他想法,如果它们在概念上更简单的话)。
#define NumOfFrames 4 // Num of animation frames
#define WidthOfFrames 15 // Characters per animation line
#define FrameHeight 5 // Frame is this many lines tall.
const char *D51[NumOfFrames][FrameHight][WidthOfFrames] = {{
" \\ 0 / ",
" \\|/ ",
" | ",
" / \\ ",
"_/ \\_ "
},
{
" ",
" __0__ ",
"/ | \\ ",
" / \\ ",
" _\\ /_ "
},
{
" ",
" o ",
" /\\ /\\ ",
" |/ \\| ",
" _\\ /_ "
},
{
" ",
" ",
" __ ",
" /_\\\\0_ ",
" _\\\\/_ \\_"
}};
void main(int argc, char *argv[]) {
FILE *f = fopen("log.txt","w");
if (f == NULL) {
printf("Error opening file!\n");
exit(1);
}
// Try to print each frame to a text file to wrap
// my brain around how this works.
for (int x=0;x<NumOfFrames;x++) {
for (int y=0;y<FrameHeight;y++) {
for (int z=0;z<WidthOfFrames;z++) {
fprintf(f, "%c", D51[x][y][z]);
}
fprintf(f,"\n");
}
}
fclose(f);
}
在这段代码中,我只是想弄清楚如何操作字符串,将图像写入文本文件。一旦我理解了这些概念,我会将其转换为 ncurses“图形”格式;这部分很简单,并没有反射(reflect)在这个示例代码中。
我的问题是,无论我在实验中尝试什么排列 - 这里有 * 而不是那里,或者那里和这里,或者那里但不是这里,或者两个索引而不是三个,或者这个或那个 - 我无法弄清楚幕后发生了什么。如果我使用整数,我可以在网上找到我需要的示例,但是使用字符/字符串/指针会增加我无法获得的复杂性。任何有助于更好地理解我需要的概念的帮助将不胜感激。
最佳答案
我的想法是将每个数字放在一个字符指针数组中
const char *D51 [FrameHeight] = {
" \\ 0 / ",
" \\|/ ",
" | ",
" / \\ ",
"_/ \\_ "
};
后面是其他数字*D52、*D53、*D54。然后我们将有一个指向指针的指针,该指针将保存这些数字的地址,例如
const char **ptr [NumOfFrames];
*ptr = D51;
*(ptr+1) = D52
..
现在我们已经有了直接或间接分配给 **ptr 的每个字符的地址,我们可以继续打印这些数字。例如,这将为我们提供第一个数字
for (int i=0; i<5; i++)
printf("%s\n", *(*(ptr)+i));
为了使 *(*(ptr)+i)
更清楚,让我们将其分解**ptr
是指向指针的指针,因此 *ptr
将保存指针的地址,这就是 *(ptr)
两边有括号的原因code> 是因为我们想要选择我们需要的图形,如果我们想要第一个图形,我们调用 *ptr
,如果我们想要显示第二个图形,我们只需调用 *(ptr+1 )
等等。
+i
允许我们指定要调用图形的哪一行,例如,如果我们想调用第一行,我们可以将 i
保留为 0
但如果我们想调用图形的底线,我们需要 i
为 4
。就像*(ptr)+4
。
既然我们指定了图号和行号,我们所要做的就是通过添加 *
运算符来取消引用指针。 *(*(ptr)+i)
我编写的示例代码:
..
..
const char *D54 [FrameHeight] = {
" ",
" ",
" __ ",
" /_\\\\0_ ",
" _\\\\/_ \\_"
};
const char **ptr [NumOfFrames];
int main(){
*ptr = D51;
*(ptr+1) = D52;
*(ptr+2) = D53;
*(ptr+3) = D54;
for(int j=0; j<4; j++)
{
for (int i=0; i<5; i++)
printf("%s\n", *(*(ptr+j)+i));
puts (" "); //this is nothing more than a newline character
}
return 0;
}
输出:
\ 0 /
\|/
|
/ \
_/ \_
__0__
/ | \
/ \
_\ /_
o
/\ /\
|/ \|
_\ /_
__
/_\\0_
_\\/_ \_
关于c - 如何在 C 中定义/使用 2 维字符串数组(3 维字符?)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55756848/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
为什么在 C# 中添加两个 char 结果是 int 类型? 例如,当我这样做时: var pr = 'R' + 'G' + 'B' + 'Y' + 'P'; pr 变量变为 int 类型。我希望它是
下面的代码可以编译,但 char 类型的行为与 int 类型的行为不同。 特别是 cout ::ikIsX >() ::ikIsX >() ::ikIsX >() using names
我正在寻找一个正则表达式,它可以匹配长度为 1 个或多个字符但不匹配 500 的内容。这将在 Rails 路由文件中使用,特别是用于处理异常。 路线.rb match '/500', to: 'err
对于 C 编程作业,我正在尝试编写几个头文件来检查所谓的“X 编程语言”的语法。我最近才开始,正在编写第一个头文件。这是我编写的代码: #ifndef _DeclarationsChecker_h_
为什么扩展的 ascii 字符(â、é 等)被替换为 字符? 我附上了一张图片...但我正在使用 PHP 从 MySQL 中提取数据,其中一些位置有扩展字符...我使用的是 Arial 字体。 您可以
我有一个与 R 中的断线相关的简单问题。 我正在尝试粘贴,但在获取(字符/数字)之间的断线时遇到问题。请注意,这些值包含在向量中(V1=81,V2=55,V3=25)我已经尝试过这段代码: cat(p
如何将 ANSI 字符 (char) 转换为 Unicode 字符 (wchar_t),反之亦然? 是否有用于此目的的任何跨平台源代码? 最佳答案 是的,在 中你有mbstowcs()和 wcsto
函数 fromCharCode 不适用于国际 ANSI 字符。例如,对于 ID 为 192 到 223 的俄语 ANSI (cp-1251) 字符,它返回特殊字符。如何解决这个问题? 我认为,需要将A
如果不喜欢,我想隐藏 id,但不起作用 SELECT * FROM character, character_actor WHERE character.id NOT LIKE character_a
现在这个程序成功地反转了键盘输入的单词。但是我想在我反转它之前“保存”指针中的单词,所以我可以比较两者,反转的和“原始的”,并检查它们是否是回文。我还没有太多经验,可能会出现比我知道的更多的错误,但我
Memcpy 和 memcmp 函数可以接受指针变量吗? char *p; char* q; memcpy(p,q,10); //will this work? memcmp(p,q,10); //w
恐怕我对一个相当过饱和的主题的细节有疑问,我搜索了很多,但找不到一个明确的答案来解决这个特定的明显-imho-重要的问题: 使用UTF-8将byte[]转换为String时,每个字节(8bit)都变成
我有一个奇怪的问题。我需要从 stat 命令打印输出字符串。 我已经编写了获取一些信息的代码。 import glob import os for file in glob.glob('system1
我正在使用 Java 并具有其值如下所示的字符串, String data = "vale-cx"; data = data.replaceAll("\\-", "\\-\\"); 我正在替换其中的“
String urlParameters = "login=test&password=te&ff"; 我有一个String urlParams,& - 是密码的一部分,如何使其转义,从而不被识别为分
大家好,我只想从此字符串中提取第一个字母: String str = "使 徒 行 傳 16:31 ERV-ZH"; 我只想获取这些字符: 使 徒 行 傳 并且不包括 ERV-ZH 仅数
这个问题已经有答案了: Crash or "segmentation fault" when data is copied/scanned/read to an uninitialized point
所以, 我有一个字符**;它本质上是一个句子,带有指向该句子中每个单词的指针;即 'h''i''\0''w''o''r''l''d''\0''y''a''y''!''\0' 在这种情况下,我希望使用可
这个问题在这里已经有了答案: Using quotation marks inside quotation marks (12 个答案) 关闭 7 年前。 如何打印 " 字符? 我知道打印 % 符号
我是一名优秀的程序员,十分优秀!