【发布时间】:2016-01-06 04:37:38
【问题描述】:
这是我从 youtube 教程修改的源代码。该计划的目的是:
它问你的年龄。如果您输入 18 或更多,则询问您的性别而不是打印您可以输入 dude 或 m'lady(取决于您的性别)。如果您的年龄小于 18 岁,则会显示“这里没什么可看的!”
我想确保如果输入不完全符合我的要求(仅数字或仅字符),它会显示“无效输入”。在我的程序中,程序询问年龄的第一部分,当年龄的输入是字母或符号时,它显示无效输入。但是,每当我将字母与 18a 或 18/ 之类的数字结合起来时,它就会显示:
"请输入您的性别。(m/f)" “输入无效。”
另外,如果我输入 18 或更多并转到程序询问性别(m/f)的部分,如果我输入数字或符号,它会显示 Invalid input.. 但是当我像 m1 或 m/ 这样组合时它显示:
“你可以进入这个网站,伙计。”
谁能帮我解决这个问题?
#include <stdio.h>
#include <conio.h>
int main(void) {
char gender;
int age=0;
printf("Please enter your age. \n");
if(scanf(" %d",&age)!=1) {
printf("invalid input. \n");
return 0;
}
if(age>=18) {
printf("Please enter your gender.(m/f) \n");
if(scanf(" %s", &gender) !=1) {
printf("Invalid input.\n");
return 0;
}
else if(gender== 'm') {
printf("You may enter this website dude.\n");
}
else if(gender== 'f') {
printf("You may enter this website m'lady.\n");
}
else {
printf("Invalid input. \n");
return 0;
}
}
else if(age<18) {
printf("Nothing to see here! \n\n");
return 0;
}
return 0;
}
【问题讨论】:
-
嗯,你已经遇到了内存损坏问题。您的“缓冲区”是单个字符。即使只输入了一个字符,它也会在它的末尾写入一个终止的空字节,即到堆栈上的以下位置。
-
最好的解决方案可能是编写自己的 scanf 函数。
标签: c