我正在创建一个堆栈,但似乎无法使输出为字符串格式。这是我第一次尝试堆栈,我发现的每个示例似乎都指向结构的int值,而不是char值。
我尝试将int强制转换为字符,但是我不认为这是字符串的实际整数值(因为它们随同一个字符串而变化)。我假设它指向一个内存位置?
typedef struct carList
{
char input[12];
char make[12];
char model[12];
char size[12];
char color[12];
char power[12];
float daily_rate;
char rented;
struct carList *next;
}
typedef struct carList StackNode;
typedef StackNode *StackNodePtr;
void push(StackNodePtr *topPtr, char input) {
StackNodePtr newPtr = malloc(sizeof(StackNode));
if(newPtr != NULL) {
newPtr->make[12] = input;
newPtr->next = *topPtr;
*topPtr = newPtr;
} else {
printf("Not inserted.");
}
}
int pop(StackNodePtr *topPtr) {
StackNodePtr tempPtr = *topPtr;
int popValue = (*topPtr)->make[12];
*topPtr = (*topPtr)->next;
free(tempPtr);
return popValue;
}
void printStack(StackNodePtr currentPtr) {
if(currentPtr == NULL) {
puts("The stack is empty.");
} else {
puts("The stack is:");
while(currentPtr != NULL) {
printf("%s --> ", currentPtr->make);
currentPtr = currentPtr->next;
}
puts("NULL\n");
}
}
int main()
{
StackNodePtr stackPtr = NULL;
push(&stackPtr, "Test");
push(&stackPtr, "test");
push(&stackPtr, "Test");
printStack(stackPtr);
}
我想打印出来:
The stack is:
Test --> test --> Test --> NULL
但是我却收到了
The stack is:
--> --> -->NULL
当我将printStack函数更改为打印%d时,我收到了
The stack is:
12653804 --> 12653692 --> 12653580 -->NULL
因此,我认为这主要与我的打印功能有关,但是我一直在努力理解原因。
最佳答案
在进入push函数之前,请注意,您的结构定义应以分号结尾。除非您放置一个,否则代码不会编译。在声明中添加存储类说明符也很好。
typedef struct carList
{
char input[12];
char make[12];
char model[12];
char size[12];
char color[12];
char power[12];
float daily_rate;
char rented;
struct carList *next;
}carList;
至于您的问题,打印功能不是问题;这是您的推送功能!现在,您只是将数组的第一个字符分配给数组中的位置[12]。一探究竟:
newPtr->make[12] = input;
我们应该使用strcpy将字符串复制到newPtr-> make上。可以这样完成:
strcpy(newPtr->make, input);
另外,您的函数声明应传递一个char数组,而不是单个字符。
void push(StackNodePtr *topPtr, char *input)
将这些项目放在一起可以获得我的代码的工作版本:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct carList
{
char input[12];
char make[12];
char model[12];
char size[12];
char color[12];
char power[12];
float daily_rate;
char rented;
struct carList *next;
}carList;
typedef struct carList StackNode;
typedef StackNode *StackNodePtr;
void push(StackNodePtr *topPtr, char *input) {
StackNodePtr newPtr = malloc(sizeof(StackNode));
if(newPtr != NULL) {
strcpy(newPtr->make, input);
newPtr->next = *topPtr;
*topPtr = newPtr;
} else {
printf("Not inserted.");
}
}
int pop(StackNodePtr *topPtr) {
StackNodePtr tempPtr = *topPtr;
int popValue = (*topPtr)->make[12];
*topPtr = (*topPtr)->next;
free(tempPtr);
return popValue;
}
void printStack(StackNodePtr currentPtr) {
if(currentPtr == NULL) {
puts("The stack is empty.");
} else {
puts("The stack is:");
while(currentPtr != NULL) {
printf("%s --> ", currentPtr->make);
currentPtr = currentPtr->next;
}
puts("NULL\n");
}
}
int main()
{
StackNodePtr stackPtr = NULL;
push(&stackPtr, "Test");
push(&stackPtr, "test");
push(&stackPtr, "Test");
printStack(stackPtr);
}
关于c - 堆栈返回整数值,而不是字符串/字符。我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55927171/