c - 检查 C 中“fgets”的输入
问题描述
我想检查用户是否写了少于 30 个字符。这是我下面的代码,但它无法按照我想要的方式检查用户的输入。例如,如果我输入 40 个字符作为输入,它不会打印Not valid input
。谁能解释我如何检查输入是否正确?
int main(int argc, char **argv) {
char string[31];
printf("Enter a string: ");
if (fgets(string, 30, stdin)) {
printf("Enter a character too: ");
char c;
scanf("%c", &c);
char *ptr = string;
if (ptr = contains(ptr, c)) {
printf("Found at position %ld\n", ptr - string + 1);
} else {
printf("Character did not found.\n");
}
} else {
printf("Not valid input\n");
}
return 0;
}
解决方案
fgets()
读取整行并将换行符保留在缓冲区中。如果缓冲区比需要的小,则缓冲区将不包含换行符,该换行符连同该行的其余部分将在随后的调用中被读取fgets()
。
fgets(buffer, sizeof buffer, stdin);
size_t len = strlen(buffer);
if (!len) /* mal-formed input */;
if (buffer[len - 1] != '\n') /* error if not eof */;
推荐阅读
- node.js - 在标头中传递 jwt
- css - Ionic 3-如何设置带有滚动内容的固定背景图像?
- angular - ngClass 从一串类中只加载一个类
- dart - Flutter image_picker post上传图片
- android - 改变或获取当前的振动强度或进行有力的振动
- angularjs - 如何通过 Angularjs 服务发送对象和数组
- java - 实例 A = 实例 B,这究竟是做什么的?
- javascript - 如何从 HTML 文件中的外部网页获取 DIV 元素?
- git - 在 AWS 上设置远程 git 存储库并从 Windows 推送
- hyperledger-fabric - 如何将环境变量传递给超级账本链码