我有一个字符串数组,我想在用户输入字符串时动态更改这些字符串。这个二维数组有一个固定的大小,比如说 char A[N][BUFF_MAX]
将存储N
每个字符串的大小最多为 BUFF_MAX
.我想让这个数组循环,也就是说,最近的输入应该存储在A[0]
中等等。
到目前为止,我在执行上述内容时没有任何问题。当用户输入超过 N
时,我的问题就出现了字符串。此时我想存储last N
输入并丢弃其余部分以仅使用 N
细胞。可以使用 strcpy
完成移位.
现在,我想用字符串编号打印这个数组。例如,如果用户输入 M
字符串,其中 M < N
字符串,它应该打印
1 string_1
2 string_2
: :
M string_M
但是,如果M > N
然后它应该打印
M-N string_(M-N)
M-N+1 string_(M-N+1)
: :
M string_M
我已经尝试了好几样东西,但我不能完全让它发挥作用。这是我的代码的简化版本。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define N 10 /* max size of array */
#define BUFF_MAX 50 /* max size of buffer */
int M = 0; /* input count */
char A[N][BUFF_MAX]; /* should i initialize this? */
void displayArray() {
for (int h = 0; h < M; h++) { /* print the elements */
printf("%2d %s\n", h + 1, A[h]); /* this doesn't number properly */
/* and needs to be modified */
}
}
int main(void) {
while(1) { /* keep reading from the user */
char input[BUFF_MAX];
fgets(input, sizeof(input), stdin); /* read input from user */
strcpy(A[M], input); /* copy input into array */
M++; /* i might need some modulo here */
if (M >= N) { /* if user inputs more than N */
for (int i = N - 1; i > 0; i--) { /* shift the array */
strcpy(A[i], A[i - 1]);
}
}
if (!strcmp(input, "hist"))
displayArray();
}
}
感谢您的帮助。
这是你的代码,有一些变化
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define N 10 /* max size of array */
#define BUFF_MAX 50 /* max size of buffer */
int M = 0; /* input count */
char A[N][BUFF_MAX]; /* should i initialize this? */
void displayArray()
{
int h;
//you need to change the condition of for in order to print
// the adequate number of elements
for ( h = 0; h < (M>N?N:M); h++) /* print the elements */
{
printf("%2d %s\n", h + 1, A[h]); /* this doesn't number properly */
/* and needs to be modified */
}
}
int main(void)
{
while(1) /* keep reading from the user */
{
char input[BUFF_MAX];
fgets(input, sizeof(input), stdin); /* read input from user */
// you need to add the condition below because the fgets include the newline
// if the user hit enter after each input
if(input[strlen(input)-1]=='\n')
input[strlen(input)-1]='\0';
// note that the subscript of the array is changed in order to
// get the desired input A[ M % N ]
// so the sequence of index will be 0 1 2 ... N-1 0 1 2 etc.
strcpy(A[M % N], input); /* copy input into array */
M++; /* i might need some modulo here */
if (!strcmp(input, "hist"))
displayArray();
}
return 0;
}
请记住,您的代码没有用于退出程序的断点。您需要在 while
循环中添加一个 break
或 return
或 goto
来完成它的执行!!
我是一名优秀的程序员,十分优秀!