我正在做一个简单的程序,它需要一年的用户,并确定是否是闰年或没有。我的问题是,我想这样,如果用户输入一个字符串,它将结束程序,如果字符串是“N”,如果它的任何其他字符串,它将只是打印输入无效。但是到目前为止,任何输入到scanf中的字符串都会破坏程序,并导致它无限循环。
#include <stdio.h>
#include <stdbool.h>
#include "leapyear.h"
int main() {
int year = 0;
while (true) {
printf("Please enter a year to check:");
scanf("%i", &year);
if (year <= 0) {
printf("Sorry that input is invalid..\n");
}
else if(year == "N") {
printf("Quitting....");
return 0;
}
else {
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
printf("%i IS a leap year \n", year);
}
else {
printf("%i IS NOT a leap year \n", year);
}
}
}
return 0;
}
我看了这里所有关于scanf的帖子,以及如何在允许字符串输入和存储到同一个变量中的同时使用int,但我无法理解它,任何帮助都将不胜感激。
2条答案
按热度按时间pxyaymoc1#
这条线
没有意义,因为
year
属于int
类型,因此无法表示字符串"N"
。如果要确定用户输入的内容是否表示整数,可以使用
fgets
将输入内容作为字符串读取,然后使用函数strtol
尝试将其转换为整数。以下是一个示例:此程序具有以下行为:
一个二个一个一个
如果输入不是整数,并且您要确定用户是否输入了
"N"
,则可以使用以下条件:juud5qan2#
C语言是一种静态类型语言,这意味着如果你把
int year
定义为一个整数,你就不能在其中存储字符串。也就是说,由于这个原因,您不能同时接受字符串和整数,但您可以将输入作为字符串,然后解析结果,看看它是否恰好是整数。
为此,只需按照建议的here使用
strtol
: