C语言输入函数
scanf 是 C 语言标准库函数,用于从标准输入(如键盘)按指定格式读数据并存入变量,核心要点:
功能:把输入字符转成对应数据类型(如 %d 转十进制整数 ),存到变量地址。
用法:scanf(“格式控制串”, &变量1, &变量2…) ,例 scanf(“%d %f”, &age, &score); 。
格式符:%d(int)、%f(float)、%lf(double)、%c(字符)、%s(字符串 )等。
地址要求:变量前加 & 传地址(字符串数组 / 指针例外,因名本身是地址 )。
返回值:成功读入的数据项数,遇文件结束 / 错误返回 EOF 。
作用是让程序运行时接收用户输入,让交互更灵活,搭配 printf 常用(一个输、一个读 )。
需要注意的是 这里还没到指针 输入函数的最后需要加上& 但实际不是&运算 是一个地址的识别
int i ;printf("请输入数字:");scanf("%d",&i);printf("你输入的数字是:%d",i);
获取控制台输入函数
char syso[20];gets(syso);printf("%s",syso);
-----------------------------char syso[20];gets(syso);puts(syso);读取 单个字符char c;c = getchar();printf("%c",c);-------------------------------char c;c = getchar();putchar(c);
回文串
#include <stdio.h>
#include <string.h>
int main(void) {char str[64];gets(str);int len = strlen(str),left=0,right=len-1;_Bool flag = 1;while(left < right){if(str[left] != str[right]){flag = 0;break;}left++;right--;}puts(flag?"是的 是你要的回文串":"不对 这不是回文串");
}
---------------------------------------------------
//提供了边界检查函数 比上面的更加稳妥
#include <stdio.h>
#include <string.h>int main(void) {char str[64];fgets(str, sizeof(str), stdin);str[strcspn(str, "\n")] = 0; // 去除换行符int len = strlen(str), left = 0, right = len - 1;_Bool flag = 1;while (left < right) {if (str[left] != str[right]) {flag = 0;break;}left++;right--;}puts(flag ? "是的 是你要的回文串" : "不对 这不是回文串");return 0;
}
//字符串回文 aba 检查是否是 回文串
#include <stdio.h>
#include <string.h>
int main(void) {char str[64];gets(str);int len = strlen(str),left=0,right=len-1;_Bool flag = 1;while(left < right){if(str[left] != str[right]){flag = 0;break;}left++;right--;}puts(flag?"是的 是你要的回文串":"不对 这不是回文串");
}
//KMP 字符串匹配算法
#include <stdio.h>
#include <string.h>int main(void) {char str1[] = "abababcabb";char str2[] = "ab";int len1 = strlen(str1), len2 = strlen(str2);int next[len2];// 正确计算next数组next[0] = 0;for (int i = 1, j = 0; i < len2; i++) {while (j > 0 && str2[i] != str2[j]) {j = next[j - 1];}if (str2[i] == str2[j]) {j++;}next[i] = j;}// 输出next数组(用于调试)printf("next数组: ");for (int i = 0; i < len2; ++i) {printf("%d ", next[i]);}printf("\n");// KMP匹配过程int i = 0, j = 0;while (i < len1) {if (str1[i] == str2[j]) {i++;j++;} else {if (j != 0) {j = next[j - 1];} else {i++;}}// 当j等于模式串长度时,表示匹配成功if (j == len2) {printf("匹配成功,起始位置: %d\n", i - j);return 0;}}// 循环结束仍未匹配成功printf("匹配失败\n");return 0;
}