如何在char数组中用空终止符去除fgets输入换行符且不使用string库
实现方案
核心逻辑完全不需要调用任何字符串库函数,手动遍历char数组找到换行符替换为空终止符即可:
- fgets读取输入后,会将有效输入内容、换行符
\n(如果输入长度小于数组容量、能读到换行的话)、空终止符\0依次存入传入的char数组 - 只需要从数组下标0开始逐个遍历元素,碰到
\n就直接将当前位置赋值为\0终止遍历即可;如果先碰到\0说明已经到数组末尾没有换行,直接停止即可
同时你原有代码存在两处可修正的问题:
int *age定义错误,atoi返回值为int类型,不需要定义为指针happyBirthday函数需要提前声明,否则编译会报隐式声明错误
修改后的完整可运行代码如下:
#include <stdio.h> #include <stdlib.h> // 提前声明自定义函数 void happyBirthday(char *name, int age); int main() { char buffer[32]; char digits[3]; int i; printf("Enter name:"); fgets(buffer,32,stdin); // 替换name末尾的换行符为空终止符 i = 0; while(buffer[i] != '\0') { if(buffer[i] == '\n') { buffer[i] = '\0'; break; } i++; } printf("Enter age:"); fgets(digits,3,stdin); // 替换age末尾的换行符为空终止符 i = 0; while(digits[i] != '\0') { if(digits[i] == '\n') { digits[i] = '\0'; break; } i++; } char *name = buffer; // 修正指针定义错误 int age = atoi(digits); happyBirthday(name, age); return 0; } // 补全happyBirthday实现即可 void happyBirthday(char *name, int age) { printf("Happy %dth birthday, %s!\n", age, name); }
内容的提问来源于stack exchange,提问作者AMCode96
相关产品推荐
相关产品推荐

