- 询问用户要输入多少个数字(以动态方式存储在两个数组中)
- 逐步输入数字,如果是正数则进入bufferP,如果是负数则进入bufferN
- 如果缓冲区已满,则将其大小加倍
- 最后输出两个缓冲区中的内容
#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++ ?
- 在“没有更多空间”的情况下,我必须将缓冲区的大小加倍,但我不知道该怎么做。
*bufferN++
几乎与bufferN++; *bufferN
相同。这就是为什么编译器会报错“error: value computed is not used”,因为值*bufferN
未被使用。 - Alejandro Blasco