S1E39 存放任意长度整数的容器
#include <stdio.h>#include <stdlib.h>
int main(void)
{
int count = 0;
char ch;
int *ptr = NULL;
printf("请输入一个整数:");
ch = getchar();// 函数调用成功,返回获取的字符(用整型表示其 ASCII 码)
// printf("ch1 = %c\n", ch);
while (ch != '\n')
{
count++;
scanf("%c", &ch);//
// printf("ch = %c\n", ch);
ptr = (int *)realloc(ptr, count * sizeof(char));
if (ptr == NULL)
{
printf("内存空间不足!\n");
}
// printf("count = %d\n", count-1);
ptr = ch;
// printf("count[%d] = %c\n", count, ptr);
}
// ptr = '\0';
printf("你输入的整数是:");
int i;
for(i = 0;i < count;i++)
{
printf("%c", ptr);
}
return 0;
}
请问我的思路写出来为什么打印不出第一个字符,且内存空间不足? 本帖最后由 梦回连营 于 2021-10-18 16:36 编辑
你在ch = getchar() 之后运行了scanf("%c", &ch); 那么这个时候给ch的值是你输入的第二个值,第一个值已经被读取进去了,所以你存储的也是第二个值。可以修改成下面这样。至于内存不足的问题我也不知道,可能和分配内存的函数有关。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int count = 0;
char ch = ' '; //先初始化好一个ch
int *ptr = NULL;
printf("enter a num: ");
while (ch != '\n')
{
scanf("%c", &ch); //开始读取输入
count++;
ptr = (int *) realloc(ptr, count * sizeof(char));
if (ptr == NULL)
printf("Insufficient memory space!\n");
ptr = ch;
}
printf("the num you enter is: ");
for(int i = 0; i < count; i++)
printf("%c", ptr);
return 0;
} 本帖最后由 jackz007 于 2021-10-18 16:50 编辑
第 13 行 "偷走" 了第一个数字
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i , count = 0 ;
char ch , * ptr = NULL ;
printf("请输入一个整数:") ;
while((ch = getchar()) != '\n') {// 所有的键盘输入统一归口到这里,杜绝丢失键盘输入字符的问题
count ++ ;
if(ptr = (char *) realloc(ptr , count * sizeof(char))) {
ptr = ch ;
} else {
fprintf(stderr , "内存分配失败!\n");
count = 0 ;// 设置内存分配失败标志
break ;// 内存分配失败,继续循环没有意义,所以,必须退出循环
}
}
if(count) {
printf("你输入的整数是:") ;
for(i = 0 ; i < count ; i ++) printf("%c" , ptr) ;
free(ptr) ;// 养成好习惯很重要!
printf("\n") ;
}
} 梦回连营 发表于 2021-10-18 16:32
你在ch = getchar() 之后运行了scanf("%c", &ch); 那么这个时候给ch的值是你输入的第二个值,第一个值已经 ...
学到了,非常感谢 jackz007 发表于 2021-10-18 16:41
第 13 行 "偷走" 了第一个数字
谢谢,受益匪浅 jackz007 发表于 2021-10-18 16:41
第 13 行 "偷走" 了第一个数字
您能帮忙看看这个问题么
https://fishc.com.cn/thread-203509-1-1.html
页:
[1]