gpt4 book ai didi

c - 用 scanf 读取 int 直到换行

转载 作者:行者123 更新时间:2023-12-04 12:02:56 26 4
gpt4 key购买 nike

初学c语言,之前用过java,所以有些东西不是很熟悉... 想读一个不定数的整数,直到换行为止。我知道,换行是 ⁄n,我已经有了一个代码,所以会读取整数,直到你输入一个字母,但如果有换行,它不会停止。

#include <stdio.h>

int main() {

int i, numberOfNumbs=0,total=0,value, valsRead;
float average;

valsRead = scanf("%d",&value);

while(valsRead>0)
{
numberOfNumbs++;
total +=value;
printf("Read %d\n", value);
valsRead = scanf("%d",&value);
}

average=(float)total/(float)numberOfNumbs;
printf("You read %d values. Average = %f.",numberOfNumbs, average);

return (0);
}

输入应该是这样的:23 4 114 2 34 3224 3 2 ⁄n

提前致谢

最佳答案

scanf 设计不是面向行的。它针对空格分隔的输入,其中空格是空格、制表符、\r 或\n 的任意组合。

如果您想使用面向行的输入,您应该使用fgets 获取字符串中的一行,然后使用strtok 和sscanf 来解析该字符串。您的代码可能会变成:

#include <stdio.h>
#include <string.h>

/* maximum size of an input line : adapt to your needs */
#define SIZE 256

int main() {

int i, numberOfNumbs=0,total=0,value, valsRead;
float average;
char line[SIZE], *val;
char delims[] = " \t\r\n";

if (fgets(line, SIZE, stdin) == NULL) { /* EOF */
fprintf(stderr, "No input\n");
return 1;
}
if (line[strlen(line) - 2] != '\n') {/* line too long */
fprintf(stderr, "Line too long\n");
return 2;
}
val = strtok(line, delims);
valsRead = sscanf(val, "%d",&value);

while(valsRead>0)
{
numberOfNumbs++;
total +=value;
printf("Read %d\n", value);
val = strtok(NULL, delims);
valsRead = (val == NULL) ? 0 : sscanf(val, "%d",&value);
}

average=(float)total/(float)numberOfNumbs;
printf("You read %d values. Average = %f.",numberOfNumbs, average);

return (0);
}

关于c - 用 scanf 读取 int 直到换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31522555/

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