1.字符数组在指定位置插入字符;
#include<stdio.h>
#include<string.h>
int main()
{
char a[100] = {0}; //最好初始化一下
char s;
int len_a, num, i;
printf("please input a string:\n");
scanf("%s %c%d", a, &s, &num);
// printf("aaaaaaaaaaaaaa\n");
len_a = strlen(a);
for(i = len_a; i >= num; i--)
{
a[i + 1] = a[i];
}
// printf("bbbbbbbbbb\n");
a[num] = s;
// a[len_a + 1] = '\0' //不初始化数组中要加'\0'
// printf("ccccccccccccc\n");
printf("%s\n", a);
return 0;
}
getchar();获取一个字符
段错误(Segmentation),不能访问内存。
可能出现段错误的三种情况;
1、int a[10];访问a[10]可能出现段错误
2、指针分配空间 申请i个字节访问i+1个,会出现段错误
3、没有分配,直接访问地址
调试段错误最常用的方法:
在每个函数段后面输出一串字符如:printf("aaaaaaaaaaaaaa\n");
\n一定要加 不加\n程序结束后一并输出
\n的作用:1.换行
2.刷新缓冲区(把缓冲区中的数据清空,并刷新到屏幕上)
∴printf 能加 \n 就加\n
sleep(1) 停1s
fflush(stdout) 函数的作用也是刷新缓冲区
2.在字符数组中指定开始位置插入字符串
#include <stdio.h>
#include <string.h>
int main()
{
char str[64] = {0}, ptr[32] = {0};
int num, len_str, len_ptr, i;
printf("Please input :\n");
scanf("%s%d%s", str, &num, ptr);
len_str = strlen(str);
len_ptr = strlen(ptr);
for (i = 0; i < len_str - num; i++)
{
str[len_str - 1 - i + len_ptr] = str[len_str - 1 - i];
}
strncpy(str + num, ptr, len_ptr);
printf("%s\n", str);
return 0;
}
3.有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位
#include <stdio.h>
int main()
{
int num, person; //person表示当前的人数
int k = 0; //k用于报数
int flag[1000] = {0}; //用于标记是否还在 1 不在 0 在
int i = 0; //数组的下标
printf("Please input a number:\n");
scanf("%d", &num);
person = num;
while (person != 1)
{
i++;