我是C编程的新手,这是我到目前为止的第一个问题,因为这是我第一次在论坛上找不到可能适合我的应用程序的任何回复。
所以:是的,这是一次学校运动,但我不希望你们为我做这件事。我要做的是创建一个程序,询问一个3位数字,并将数字中的所有数字相加。
我已经这样做了,但我想更深入,让用户无法输入不同的3位数字。到目前为止,我有这个:
include <stdio.h>
include <stdlib.h>
include <math.h>
include <string.h>
include <time.h>
include <conio.h>
include <ctype.h>
int main()
{
int mainnum, secnum, suma, resto ;
char repetir;
suma = 0;
do
{
printf("Input a 3 digit number: ");
scanf("%d", &mainnum);
fflush(stdin);
if (mainnum>999)
{
printf("ERROR: Number is too big\n");
}
else if (mainnum<99)
{
printf("ERROR: Number is too small\n");
}
else if (!isdigit(mainnum))
{
printf("ERROR: You introduced invalid characters\n");
}
} while (mainnum>999 || mainnum<99 || !isdigit(mainnum));
secnum = mainnum;
while (secnum != 0)
{
resto = secnum % 10;
suma = suma + resto;
secnum = secnum / 10;
}
printf("The sum of %d digits = %d\n \n", mainnum, suma);
if (suma != 0) suma = 0;
printf("Press Y to repeat, or any key to exit: ");
getchar();
repetir = getchar();
} while (repetir == 'y' || repetir == 'Y');
return 0;
}
我学到了很难的方法&#34; isdigit&#34;函数不会起作用,因为int不是ASCII字符。我一直在寻找方法来找到一种方法来完成这项工作,但我似乎无法达到目的。
任何帮助和更正都是相关的!
答案 0 :(得分:0)
首先,除非使用Windows,否则无法刷新标准输入。
从C11开始7.21.5.2 fflush功能,fflush仅适用于输出/更新流,而不适用于输入流。
如果流指向未输入最新操作的输出流或更新流,则fflush功能会将该流的任何未写入数据传送到主机环境以写入该文件;否则,行为未定义。
有两种方法来解决这个问题。首先,您可以将3位数字读取为字符串,并通过字符串进行算术运算。或者您同时使用模数运算,%和除法。希望这可以帮助你,而不只是给你答案。
答案 1 :(得分:0)
用于测试数字输入是否正确的伪代码:
$menu[$i][menu][name] == 'Reseller'
通过测试read an int value
if it worked
read a char value
if it worked
if the char value is newline
if the int value's range is correct
print the int value
的函数返回值来检查“它是否有效”。请参阅手册页了解应该是什么。
输入另一个char的原因是测试下一个char是否是换行符。如果输入是例如scanf()
,那么将正确输入数字,但下一个字符读取将是123a
而不是a
。它还会检测您是否输入了newline
,因为下一个字符将是123.45
应该没有必要刷新输入缓冲区 - 实际上它位于错误的位置并且会破坏我的第二个测试,因为下一个字符的存在是.
。