gpt4 book ai didi

c - 尝试在 C 中打印 ascii 表示

转载 作者:太空宇宙 更新时间:2023-11-04 08:27:56 25 4
gpt4 key购买 nike

所以我试图根据我在 box_ascii.h 中定义的一些 ascii 字符动态生成一个框。我只是想测试我的逻辑,当我进入我的 for 循环时,我得到一个错误:

$ make create_dynamic_box
cc create_dynamic_box.c -o create_dynamic_box
create_dynamic_box.c:26:30: error: expected expression
printf("%c", BOX_TOP_LEFT_CORNER);
^
./box_ascii.h:6:41: note: expanded from macro 'BOX_TOP_LEFT_CORNER'
#define BOX_TOP_LEFT_CORNER = "\214" // ╓

我对错误的谷歌研究通常意味着我需要像 int b = a 这样的东西,它基本上告诉我某些东西没有类型或类型错误(?)

代码的任何方式:

box_ascii.h

#ifndef __box_ascii_h__
#define __box_ascii_h__

// Might not be exact Ascii Characters but they come from:
// http://www.asciitable.com/
#define BOX_TOP_LEFT_CORNER = "\214" // ╓
#define BOX_TOP_RIGHT_CORNER = "\187" // ╖
#define BOX_BOTTOM_LEFT_CORNER = "\200" // ╚
#define BOX_BOTTOM_RIGHT_CORNER = "\188" // ╛
#define BOX_SIDE = "\186" // ║
#define BOX_TOP_BOTTOM = "\205" // ═

#endif

create_dynamic_box.c

#include <stdio.h>
#include <stdlib.h>
#include "box_ascii.h"

void print_border(int width, int height);

int main(int argc, char *argv[]) {
if(argc < 3) {
printf("Mustenter width and height.");
return -1;
}


print_border(atoi(argv[1]), atoi(argv[2]));

return 0;
}

void print_border(int width, int height) {
int row = 0;
int col = 0;

for (row = 0; row < width; row ++) {
for (col = 0; col < height; col++) {
if (row == 0 && col == 0) {
printf("%c", BOX_TOP_LEFT_CORNER); // error thrown here.
}
}
}
}

发生了什么事?是因为我正在使用 %c 吗??

最佳答案

出现错误消息是因为宏进行文本替换 - 它们不是命名值。

所以

#define BOX_TOP_LEFT_CORNER             = "\214"
printf("%c", BOX_TOP_LEFT_CORNER);

将被编译器视为

printf("%c", = "\214");

这有两个问题。首先,= 放错了地方。其次,%c 导致 printf() 期望单个字符,而 "\214" 是两个字符的数组( '\214''\0')。

因此,= 符号需要从宏中移除。

如果要使用%c格式,将宏定义改为使用单引号字符(')

#define BOX_TOP_LEFT_CORNER           '\214' 

如果您希望宏是多字符字符串,则使用%s 格式。

无论哪种方式,都不要在需要单个字符的地方提供字符串,反之亦然。

此外:像 \214 这样的字符是扩展的 ASCII(定义不明确)而不是 ASCII。

关于c - 尝试在 C 中打印 ascii 表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29571659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com