gpt4 book ai didi

c - 读入特定数量的变量

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

我必须读取不同的坐标并将它们保存到结构中。对于这个任务我只能使用

#include <stdio.h>
#include <stdbool.h>

scanf 来读入它。我还必须使用 GCC 编译器。对于一个结构,我需要 4 个坐标,因此插入看起来像这样:

Coordinates: 11 12 13 14 21 22 23 24
// | First | | Second |

对于读入,我有以下结构:

int read() {
int a;
scanf("%d",&a);
return a;
}

主要内容:

printf("Coordinates: ");
int buffer = read();
while(buffer != 0) {
//write current buffer in struct
...
buffer = read();
}

所以问题是,对于这种结构,插入需要以 0 结尾。但我的任务是,当没有更多的“四人包”坐标时,读入过程结束。例如:

Coordinates: 11 12 13 14 21 22 23 24 31
// | First | | Second | invalid -> while loop ends

所以我不知道如何取消while循环,因为我不知道用户会输入多少坐标。

允许的库功能:scanf()、printf()、putchar()

我希望你们中有人能理解我并能帮助我。

最佳答案

OP 的代码无法区分读取 “0” 和遇到错误。它不会跟踪读取了 4 个数字中的多少个。它不检测前缀 "Coordinates:"

int read() {
int a;
scanf("%d",&a);
return a;
}

读入“四包”,一次 1 个四包。

struct pt4 {
int i[4];
};

// Return EOF, 0, 1, or 4
struct pt *Read_foursome(struct pt4 *fourpack, int count) {
// Look for prefix
if (count == 0) {
// Record number of characters read
int n = 0;
if (scanf(" Coordinates:%n", &n) == EOF) return EOF;
if (n == 0) return 1; // Unexpected data, prefix not exactly there.
}
// record the number of fields successful scanned.
int n = scanf("%d%d%d%d",
&fourpack.i[0], &fourpack.i[1], &fourpack.i[2], &fourpack.i[3]);

// No more data
if (n == EOF) return EOF;

// no numeric data
if (n == 0) return 0;

// Unexpected data
if (n != 4) return 1;

// As expected
return 4;
}

示例用法

int n;
int count = 0;
struct pt4 fourpack;
printf("Coordinates:");
while ((n = Read_foursome(&fourpack, count)) == 4) {
// Use fourpack
printf(" %d %d %d %d",
fourpack.i[0], fourpack.i[1], fourpack.i[2], fourpack.i[3]);
count++;
}
printf("\n");

// If n == 0 maybe time to look for another line of fourpack
// If n == 1, some syntax error in the line.

关于c - 读入特定数量的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35235011/

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