C中的用户输入和动态内存分配
User input and dynamic memory allocation in C
我对 C 编程还很陌生,我一直在尝试创建一个首先需要用户输入的程序。一开始,我需要用户输入一定数量的数字,例如:4 12 8 6 5 4 7
基本上,他一直在输入数字,并在数字之间留出空格。然后用户按下回车键,用户输入结束。阅读我已经在网上找到的东西,我看到了这个帖子:
while (...){
scanf("%c",&c[i]);
if(c[i]=='\n')
break;
}
那么,现在,使用动态内存分配,是否可以让用户像这样在一行中输入所有内容,以空格分隔,然后按回车键结束?
我想要发生的事情:
- 用户输入:5 4 5 6 8 5 输入
- 数组 = {5, 4, 5, 6, 8, 5}
你说:certain amount of numbers
;你知道那个号码吗?如果是 - 您可以为那么多值分配内存。如果不是 - 您需要实施一些逻辑来根据需要分配额外的存储空间。例如,将已分配的 space 加倍。您可以将容量增加 1 以避免浪费 space,代价是重复复制您的数据。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch = 0;
int size = 0, capacity = 1;
int* c = malloc(sizeof(int) * capacity);
while (1) {
scanf("%d%c", &c[size], &ch);
if (ch == '\n')
break;
size++;
if (size == capacity)
{
capacity *= 2; // use whatever policy to increase the capacity
c = realloc(c, sizeof(int) * capacity);
}
}
return 0;
}
我对 C 编程还很陌生,我一直在尝试创建一个首先需要用户输入的程序。一开始,我需要用户输入一定数量的数字,例如:4 12 8 6 5 4 7
基本上,他一直在输入数字,并在数字之间留出空格。然后用户按下回车键,用户输入结束。阅读我已经在网上找到的东西,我看到了这个帖子:
while (...){
scanf("%c",&c[i]);
if(c[i]=='\n')
break;
}
那么,现在,使用动态内存分配,是否可以让用户像这样在一行中输入所有内容,以空格分隔,然后按回车键结束?
我想要发生的事情:
- 用户输入:5 4 5 6 8 5 输入
- 数组 = {5, 4, 5, 6, 8, 5}
你说:certain amount of numbers
;你知道那个号码吗?如果是 - 您可以为那么多值分配内存。如果不是 - 您需要实施一些逻辑来根据需要分配额外的存储空间。例如,将已分配的 space 加倍。您可以将容量增加 1 以避免浪费 space,代价是重复复制您的数据。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch = 0;
int size = 0, capacity = 1;
int* c = malloc(sizeof(int) * capacity);
while (1) {
scanf("%d%c", &c[size], &ch);
if (ch == '\n')
break;
size++;
if (size == capacity)
{
capacity *= 2; // use whatever policy to increase the capacity
c = realloc(c, sizeof(int) * capacity);
}
}
return 0;
}