gpt4 book ai didi

c - fgets 和 printf 的问题..打印字符串

转载 作者:太空宇宙 更新时间:2023-11-04 05:41:04 24 4
gpt4 key购买 nike

我在做一个 C 语言项目时遇到了障碍。我正在尝试打印点坐标样式,并且我已经包含了所有必要的代码来帮助你们帮助我!

//point.h
struct Point{
char label;
int x;
int y;
};

//point.c
displayPoint(struct Point p){
char label = p.label;
int x = p.x;
int y = p.y;

// label: (x, y)
printf("(%c: (%d, %d)", label, x, y);
}


//build point from standard input
readPoint(){
struct Point point;
printf("Enter label (character): ");
fgets(buff, MAX_LINE, stdin);
point.label = buff; //I think this is the issue here
printf("Enter x:");
fgets(buff, MAX_LINE, stdin);
point.x = (int) strtol(buff, NULL, MAX_LINE);
printf("Enter y:");
fgets(buff, MAX_LINE, stdin);
point.y = (int) strtol(buff, NULL, MAX_LINE);

编译后,我收到以下错误:

points.c: In function 'displayPoint':
points.c: warning: initialization makes pointer from integer without a cast [enabled by default]
points.c: warning: format '%c' expects argument of type 'int', but argument 2 has type 'char *' [-Wformat]
points.c: In function 'readPoint':
points.c: warning: assignment makes integer from pointer without a cast [enabled by default]

如果我使用以下信息创建一个点:

Label: A
x: 2
y: 3

然后运行 ​​displayPoint 我得到这个输出:

R: (2, 3)

显然这是错误的,我不知道 R 是从哪里来的。我在这里错过了什么?为什么 C 必须如此顽固,这在 java、python 等中很容易做到

最佳答案

这里有几个问题:

  1. fgets 获取缓冲区,而不是单个字符。我希望 buff 声明为字符数组 (char buff[MAX_LINE])。

  2. 您的结构为其标签声明了单个字符,但您将缓冲区分配给该字符。

  3. 您正在重复使用缓冲区。因为这只是指向一 block 内存的指针,所以您可能会破坏旧数据。您可能(阅读,可能会想要)在两次使用之间重置您的缓冲区。

鉴于此,我认为您的意图是:

point.label = buff[0];

我猜您只是想为您的标签添加一个字符,在这种情况下这应该可以工作并且您不会破坏该值。 (我不知道你输入的其余部分。)

关于c - fgets 和 printf 的问题..打印字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19213449/

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