gpt4 book ai didi

循环遍历带有全局计数器的 C 数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:42 25 4
gpt4 key购买 nike

我有一个字符串数组,我想在用户输入字符串时动态更改这些字符串。这个二维数组有一个固定的大小,比如说 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 循环中添加一个 breakreturngoto 来完成它的执行!!

关于循环遍历带有全局计数器的 C 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28078708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com