gpt4 book ai didi

c - 如何读取数组中int的随机数

转载 作者:太空宇宙 更新时间:2023-11-04 07:11:41 26 4
gpt4 key购买 nike

我想将空格分隔的整数读取到一个数组中,当我按回车键时它应该在任何时间点停止读取,如何为这个程序实现循环请帮我解决这个问题。我试过下面的代码,但它不起作用。以及如何再次阅读。

#include<stdio.h>
int main()
{
int arr[30];
int j=0;
while(1)
{
int d;
scanf("%d",&d);
arr[j++]=d;
if(d=='\n')break;
}
return 0;
}

提前致谢

最佳答案

您的问题是 scanf 在查找下一项时会自动跳过所有空格(空格、制表符、换行符)。您可以通过特别要求读取换行符来区分换行符和其他空格:

int main() {
int arr[30]; // results array
int cnt = 0; // number of results
while (1) {
// in the scanf format string below
// %1[\n] asks for a 1-character string containing a newline
char tmp[2]; // buffer for the newline
int res = scanf("%d%1[\n]", &arr[cnt], tmp);
if (res == 0) {
// did not even get the integer
// handle input error here
break;
}
if (res == 1) {
// got the integer, but no newline
// go on to read the next integer
++cnt;
}
if (res == 2) {
// got both the integer and newline
// all done, drop out
++cnt;
break;
}
}
printf("got %d integers\n", cnt);
return 0;
}

这种方法的问题在于它只能识别整数后面的换行符,并且会自动跳过仅包含空格的行(并从下一行开始读取整数)。如果这是 Not Acceptable ,那么我认为最简单的解决方案是将整行读入缓冲区并解析该缓冲区中的整数:

int main() {
int arr[30]; // results array
int cnt = 0; // number of results
char buf[1000]; // buffer for the whole line
if (fgets(buf, sizeof(buf), stdin) == NULL) {
// handle input error here
} else {
int pos = 0; // current position in buffer
// in the scanf format string below
// %n asks for number of characters used by sscanf
int num;
while (sscanf(buf + pos, "%d%n", &arr[cnt], &num) == 1) {
pos += num; // advance position in buffer
cnt += 1; // advance position in results
}
// check here that all of the buffer has been used
// that is, that there was nothing else but integers on the line
}
printf("got %d integers\n", cnt);
return 0;
}

另请注意,当行中的整数超过 30 个时,上述两种解决方案都会覆盖结果数组。如果第二个解决方案的长度超过缓冲区的长度,那么第二个解决方案也会留下一些未读的输入行。根据您输入的来源,这两个问题都可能是需要在实际使用代码之前解决的问题。

关于c - 如何读取数组中int的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27886343/

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