C 从数组中输入几个数字,每个数字检查是否为整数
各位!! 我希望有人能帮我用C语言解决一些问题。 这是我第一次认真地做家庭作业,我没有经验,而且我正在学习电子学习,所以老师的帮助不是很有效 我需要用C语言开发控制台应用程序。用户需要输入10个整数,如果插入的数字不是整数,则需要输出错误并再次重新输入新数字,直到所有10个整数都被插入 如果我说这10个数字不能是0(我这样做是为了确保我的if-else语句可以工作),但如果我想检查每个输入数字是否为整数,那么这一切都不会起作用 我怎样才能把它做好 请帮忙 到目前为止,我的代码如下所示:C 从数组中输入几个数字,每个数字检查是否为整数,c,arrays,integer,C,Arrays,Integer,各位!! 我希望有人能帮我用C语言解决一些问题。 这是我第一次认真地做家庭作业,我没有经验,而且我正在学习电子学习,所以老师的帮助不是很有效 我需要用C语言开发控制台应用程序。用户需要输入10个整数,如果插入的数字不是整数,则需要输出错误并再次重新输入新数字,直到所有10个整数都被插入 如果我说这10个数字不能是0(我这样做是为了确保我的if-else语句可以工作),但如果我想检查每个输入数字是否为整数,那么这一切都不会起作用 我怎样才能把它做好 请帮忙 到目前为止,我的代码如下所示: #inc
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
float f;
int numbers[10];
for (i = 0; i < 10; i++)
{
scanf ("%d", &numbers[i]);
if (numbers[i] != 0)
{
scanf ("*%d", &numbers[i]);
}
else
{
printf ("\nError!Entered number is't integer \n");
printf ("\nPlease insert number again \n");
scanf("%*d", &numbers[i]);
}
}
}
#包括
#包括
int main()
{
int i;
浮动f;
整数[10];
对于(i=0;i<10;i++)
{
scanf(“%d”和编号[i]);
如果(数字[i]!=0)
{
scanf(“*%d”和编号[i]);
}
其他的
{
printf(“\n错误!输入的数字不是整数\n”);
printf(“\n请再次插入编号\n”);
scanf(“%*d”和编号[i]);
}
}
}
您可以使用以下几种技术:
sscanf()
将字符串转换为整数scanf
返回成功匹配和分配的输入项目数。对于scanf
的每次调用,可以检查1
的此值。如果值为0
,则应放弃输入以清除stdin
缓冲区,然后再次读取输入
#include <stdio.h>
#include <ctype.h>
int main(void) {
int i = 0;
int val;
char ch;
int numbers[10];
while(i < 10) {
// read an integer and the first non-numeric character
val = scanf("%d%c", numbers + i, &ch);
// if the number of items assigned by scanf is not 2 or if
// the first non-numeric character is not a whitespace, then
// discard the input and call read input again.
// for example input of type 32ws are completely discarded
if(val != 2 || !isspace(ch)) {
while((ch = getchar()) != '\n') // discard the invalid input
; // the null statement
printf("Error! Entered number is not an integer.\n");
printf("Please enter an integer again.\n");
continue;
}
++i;
}
// process the numbers array
return 0;
}
#包括
#包括
内部主(空){
int i=0;
int-val;
char ch;
整数[10];
而(i<10){
//读取整数和第一个非数字字符
val=scanf(“%d%c”,数字+i和ch);
//如果scanf分配的项目数不是2,或者
//第一个非数字字符不是空白,然后
//放弃输入并再次调用读取输入。
//例如,32ws类型的输入被完全丢弃
如果(val!=2 | |!isspace(ch)){
while((ch=getchar())!='\n')//放弃无效输入
;//null语句
printf(“错误!输入的数字不是整数。\n”);
printf(“请再次输入整数。\n”);
继续;
}
++一,;
}
//处理数字数组
返回0;
}
现在,它的工作方式,我需要。太好了-非常感谢虽然我不完全清楚您问题的细节,但下面是与您想要的类似的代码大纲:
int main(void)
{
int i;
int numbers[10];
int sum = 0;
for(i=0; i<10; ++i)
{
printf("Enter #%d:\n", i+1);
scanf("%d", numbers+i);
if (numbers[i] % 2 == 0) // Then Number is even
{
sum += numbers[i];
}
}
printf("The sum of only the even numbers is %d\n", sum);
getch();
return 0;
}
int main(无效)
{
int i;
整数[10];
整数和=0;
对于(i=0;i读取int
,建议fgets()
然后sscanf()
或strtol()
建议创建一个可重复使用的int GetInt(const char*prompt)
函数。
用户输入是有害的。在经过充分审查之前不要相信它。请看《谢谢你这么快的回复》。你能给我写一个例子,说明它在每个选项的代码中的外观吗?今天我已经在尝试sscanf的东西了,但有一些东西是错误的。谢谢。这是可行的,但有没有办法让程序中的数字消失,因为不是我nteger不会在数组中计数。例如-用户输入1 2 3 0,5(错误)4(而不是0,5)5 6 7 8 9 10=总输入数(整数)是10,因为在您的代码中,他不允许输入最后一个数字,因为他计算的数字不是整数。@effeja那么您最好将整数作为字符串读取,然后检查字符串是否包含任何非数字字符。@effeja请输入更新后的答案。现在它做了您想要的。第二个val=scanf(“%d”)似乎是,数字+i);
应删除。
val = scanf("%d", numbers + i);
int main(void)
{
int i;
int numbers[10];
int sum = 0;
for(i=0; i<10; ++i)
{
printf("Enter #%d:\n", i+1);
scanf("%d", numbers+i);
if (numbers[i] % 2 == 0) // Then Number is even
{
sum += numbers[i];
}
}
printf("The sum of only the even numbers is %d\n", sum);
getch();
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i;
int numbers[10];
for (i = 0; i < 10; ) {
char buffer[50];
if (fgets(buffer, sizeof buffer, stdin) == NULL) break;
int n; // number of `char` parsed
if (sscanf(buffer, "%d %n", &numbers[i], &n) != 1 || buffer[n] != '\0') {
printf("Error! Entered number is not an integer.\n");
printf("Please enter an integer again.\n");
continue;
}
i++;
}
return 0;
}
if (fgets(buffer, sizeof buffer, stdin) == NULL) break;
char *endptr;
errno = 0;
long num = strtol(buffer, &endptr, 10);
if (errno || num < INT_MIN || num > INT_MAX) Handle_RangeError();
if (buffer == endptr || *endptr != '\n') Handle_SyntaxError();
numbers[i] = (int) num;