C language implementation of the array loop left right flipped example

  • 2020-06-07 04:56:45
  • OfStack

Arrays combined with Pointers can do many interesting things, such as the following program:

Suppose the array is: 12345

If you move to the left once, it is: 23,451, and so on

If you move to the right once, it is: 51234, and so on

Flip: 54321

Let's implement this program:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NR(x) (sizeof(x)/sizeof(x[0]))
// An array of left  
int buffer_left_move(int *buffer , int buf_len)
{
	int i ;
	char tmp = buffer[0];
	for(i = 1 ; i < buf_len ; i++)
	{
		buffer[i-1] = buffer[i] ;
	}
	buffer[buf_len-1] = tmp ;
}
// An array of moves to the right  
int buffer_right_move(int *buffer , int buf_len)
{
	int i ;
	char tmp = buffer[buf_len - 1];
	for(i = buf_len ; i > 0 ; i--)
	{
		buffer[i] = buffer[i-1] ; 
	}
	buffer[0] = tmp ;
}
// The array to flip  
int buffer_turn_over(int *buffer , int buf_len)
{
	int size = buf_len ; 
	int i , tmp; 
	for(i = 0 ; i < size/2 ; i++)
	{
		tmp = buffer[i] ; 
		buffer[i] = buffer[size-1-i] ;
		buffer[size-1-i] = tmp;
	}
}
// Print the array  
void print_buffer(int *buffer, int buf_len)
{
	int i ;
	system("cls");
	printf("please input \'a' or \'b' or \'w' \n");
	for(i = 0 ; i < buf_len ; i++)
	{
		printf("%d",buffer[i]);
	}
	putchar('\n');
}
 
int main(void)
{
	int buffer[5] = {1,2,3,4,5} ;
	
	print_buffer(buffer,NR(buffer));
	while(1)
	{
		switch(getch())
		{	
			// On the left  
			case 'a': 
					buffer_left_move(buffer,NR(buffer)) ;
					print_buffer(buffer,5);
					break ;
			// On the right  
			case 'd': 
					buffer_right_move(buffer,NR(buffer));
					print_buffer(buffer,5);
					break ;
			// flip  
			case 'w':
					buffer_turn_over(buffer,NR(buffer)) ;
					print_buffer(buffer,5);
					break ;
		}
	}
	return 0 ; 
}

Operation results:


please input 'a' or 'b' or 'w'

12345

Press a to move to the left, press d to move to the right, and press w to flip


Related articles: