gpt4 book ai didi

C - 有效地忽略行尾的额外输入,同时仍然检查是否发送了所有需要的输入

转载 作者:太空宇宙 更新时间:2023-11-04 08:37:22 24 4
gpt4 key购买 nike

我需要从标准输入读取一个可变顺序矩阵。输入的第一行是矩阵的顺序 (N),接下来的 N 行都应该有 N 个空格分隔的整数。但是,在发送该行所需的所有输入后,该行可以有评论。

例如,这是 100% 有效的输入:

3        Matrix Order
1 2 3 Line 0
4 5 6 Line 1
7 8 9 Line 2
/empty line

我已经设法使用以下代码做到了这一点:

scanf("%d", &matrixOrder);
scanf("%*[^\n]");

for (i = 0; i < matrixOrder; i++) {
for (j = 0; j < matrixOrder; j++) {
scanf("%d", &matrix[i][j]);
}

scanf("%*[^\n]");
}

但是,我还必须能够知道何时该行未提供所有需要的输入并输出警告消息。例如,以下示例应输出警告:

3
1 1 1
1 1 1
1 1
/empty line

我当前的代码只是忽略了缺失的条目。

我能想到的唯一可能这样做的方法是一次读取一个字符,一旦到达一个换行符,检查我是否已经收到该行所需的所有输入。然而,这将需要我读取可能有多个数字甚至负值的整数作为字符并自己进行转换。这对我来说似乎远非理想的解决方案。

有没有更好、更智能的方法来做到这一点?我问主要是因为我不是C出身,还不太习惯。

最佳答案

您可以检查 scanf 的返回值并打印必要的警告消息:

if ( scanf("%d", &matrix[i][j]) != 1 )
{
printf("Warning: did not find a number for row=%d and col=%d\n", i, j);
}

循环可以是:

for (i = 0; i < matrixOrder; i++) {
for (j = 0; j < matrixOrder; j++) {
if ( scanf("%d", &matrix[i][j]) != 1 )
{
printf("Warning: did not find a number for row=%d and col=%d\n", i, j);
break;
}
}
scanf("%*[^\n]");
}

关于C - 有效地忽略行尾的额外输入,同时仍然检查是否发送了所有需要的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25656548/

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