gpt4 book ai didi

c - 读取多行输入并将整数保存到数组中

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

我正在尝试将一些 int 保存到一个从用户输入中读取的数组中。我不知道每行中 int 的数量,只知道行数也将是该行中 int 的最大数量。例如,如果这是 5,则用户应输入 5 行 int,每行最多包含 5 个元素。这些值将为正。我做错了什么?

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
int n;
scanf("%d",&n);
int array_row[n];
int i=0;
int noEnter=n;
//My idea is when in getchar() there is a enter it means that the user wants to go to the next line so decrement noEnter with 1 and also store a value -1 which tells me that that was the end of the line
while(noEnter!=0){
int c;
if(scanf("%d",&c)==1){
array_row[i]=c;
i++;
continue;
}
char d=getchar();
if(d=='\n'){
array_row[i]=-1;
i++;
noEnter--;
continue;
}
}



for(int i=0;i<n*n;i++){
printf("%d ",array_row[i]);
}

return 0;
}

输入示例:

5
4
4 35 65
4 32
2 222 4 5 6
4

输出:

4 -1 4 35 65 -1 4 32 -1 2 222 4 5 6 -1 4 -1

最佳答案

scanf 不会像您期望的那样在 \n 处停止。它正在读取整数..因此我猜你的程序甚至没有结束。读取一行并将其分成整数。这样你就可以获得整数并相应地处理它们。

由于事先不知道输入的整数数量,您可以标记行 strtok,然后将每个数字从字符串转换为 int

此外,您的输入与给定的输出不一致。您在第一行输入了 5,但它从未出现在前几个数字的输出中。

#define LINE 100
..

int len=0;
char line[LINE];
char*word;
while(noEnter<5){
fgets(line,LINE,stdin);
word=strtok(line," \n");
if(word == NULL)
break;
while(word != NULL){
int p=atoi(word);
array_row[len++]=p;
word=strtok(NULL," \n");
}
noEnter++;
array_row[len++]=-1;
}

scanf 被执行 读取输入直到第一个非空白字符(保留 未读),或者直到无法读取更多字符。

在这里,在到达 \n 所在的行之前,您甚至没有机会使用 getchar() 消耗 \nscanf() 消耗和丢弃。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LINE 50
int main(int argc, char *argv[]) {
int n=5;
int array_row[LINE];
int len=0;
int noEnter=3;
char line[LINE];
char*word;
while(noEnter<5){

fgets(line,LINE,stdin);
word=strtok(line," \n");
if(word == NULL)
break;
while(word != NULL){
int p=atoi(word);
array_row[len++]=p;
word=strtok(NULL," \n");
}
noEnter++;
array_row[len++]=-1;
}
for(int i=0;i<len;i++){
printf("%d ",array_row[i]);
}

return 0;
}

关于c - 读取多行输入并将整数保存到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46981106/

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