gpt4 book ai didi

c - C中的顺序输入

转载 作者:太空宇宙 更新时间:2023-11-04 05:33:58 25 4
gpt4 key购买 nike

假设我正在创建一个 3*4 矩阵(或一个包含 12 个元素的二维数组)。因此,我希望用户按顺序一个接一个地输入元素值,除以 空格/制表符回车键。此外,如果序列中的某个值是错误的(在我的例子中,任何非整数值都是错误的),我想忽略它并读取下一个值,直到我拥有所有 12 个值。

int fill(Matrix * mtx)
{
puts("Start entering numbers. Please note that only integer values will be recorded.");

int temp = 0;

for (int i = 1; i <= mtx -> rows; i++)
{
for (int j = 1; j <= mtx -> cols; j++)
{
scanf(" %d", &temp);

setElement(mtx, i, j, temp);
}
}

return 0;
}

这是我对算法最基本的设想;我想知道这个“如果错误则跳过输入”条件的实现。

顺便说一句,刚开始学习 C,所以非常感谢任何类型的建议!

最佳答案

您必须检查 scanf 的返回值以确定它是否正确扫描了整数输入。如果由于输入错误而失败 - scanf 无法将其作为输入,那么您必须确保清除 stdin 以便下一次调用scanf 不要失败。你可以做的是,当 scanf 返回 0 - 消耗所有字符(使用 getchar 或类似的)并这样做直到你得到 \n(考虑到用户在一行中输入了每个数字)。插图将是:

int n; //total number inputs to take.
n = 10;
int num, num_inputs = 0;
while( 1 )
{
while(scanf("%d", &num) != 1)
{
int c;
while ((c = getchar()) != EOF && c != '\n')
;
if(c == EOF){ fprintf(stderr,"Error in input\n"); exit(1)}
}
num_inputs++; // one more int correctly input.
...
if( num_inputs == n )
break;
}

另一种更好的方法是使用 strto* 函数,然后考虑它的返回值以了解是否有任何错误。示例如下:(这里我们只展示了每行中有单个 int 输入的情况 - 这可以扩展为处理一行中的多个 int 输入)。

char buf[MAXLEN];
int num_inputs = 0;
while(fgets(buf,MAXLEN,stdin)){
char *en;
errno = 0;
long n = strtol(line, &en, 10);
if (errno == 0 && *en== '\0' && n >= INT_MIN && n < INT_MAX)
{
// n is an correctly inputted int
num_inputs++;
}
}

查看 strtol 的手册页 - 有一份可能出现的错误的详细列表。检查一下。

关于c - C中的顺序输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48455412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com