【发布时间】:2018-12-20 09:36:37
【问题描述】:
我正在编写一个必须的小程序:
- 询问用户他将输入多少个数字(动态存储在 2 个选项卡中)
- 逐步输入数字,如果他是正数则进入缓冲区P,如果负数则进入缓冲区N
- 如果缓冲区中没有更多位置,则将其大小加倍
- 最后 printf 两个缓冲区
这是我的代码:
#include <stdlib.h>
#include <stdio.h>
int main(){
int length = 0;
printf("Number of data: \n");
scanf("%d", &length);
int *bufferP = (int*)malloc(2*sizeof(int));
int *bufferN = (int*)malloc(2*sizeof(int));
int number = 0;
for (int i = 0 ; i <= length ; i++){
scanf("%d", &number);
if(number < 0){
if(*bufferN == NULL){
printf("No more place");
exit(0);
}
*bufferN= number;
*bufferN++;
}
if(number >= 0){
if(*bufferP == NULL){
printf("No more place");
}
*bufferP = number;
*bufferP++;
}
}
int res =0;
printf("tab negative : ");
for (int i = 0; bufferN[i] != NULL; i++)
{
res = bufferN[i];
printf("%d\n", res );
}
printf("tab positive : ");
for (int i = 0; bufferP[i] != NULL; i++)
{
res = bufferP[i];
printf("%d\n", res );
}
}
我遇到了这些错误:
In function ‘main’:
rev_S3_ptr.c:14:16: error: comparison between pointer and integer [-Werror]
if(*bufferN == NULL){
^~
rev_S3_ptr.c:19:4: error: value computed is not used [-Werror=unused-value]
*bufferN++;
^~~~~~~~~~
rev_S3_ptr.c:23:16: error: comparison between pointer and integer [-Werror]
if(*bufferP == NULL){
^~
rev_S3_ptr.c:28:4: error: value computed is not used [-Werror=unused-value]
*bufferP++;
^~~~~~~~~~
rev_S3_ptr.c:35:29: error: comparison between pointer and integer [-Werror]
for (int i = 0; bufferN[i] != NULL; i++)
^~
rev_S3_ptr.c:41:29: error: comparison between pointer and integer [-Werror]
for (int i = 0; bufferP[i] != NULL; i++)
所以我的问题是:
- 缓冲区像标签一样工作,对吗?那么为什么我不能说如果指针为空它是满的并执行 *buffer ++ 呢?
- 在“No more place”处,我必须将缓冲区大小加倍,但我不知道该怎么做。
【问题讨论】:
-
你熟悉 struct 吗?
-
关于您的第一个问题,如果您看到C operator preference table,则代码
*bufferN++与您编写bufferN++; *bufferN几乎相同。这就是为什么编译器说你error: value computed is not used因为值*bufferN未被使用。
标签: c