#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
char str[500];
scanf("%[^\n]s",str);
printf("%d\n",n);
printf("%s",str);
return 0;
}
输入:
5 7 1 2 3
输出:
5 5 ->
我希望输出为
5
7 1 2 3
任何人都可以帮我处理我的代码......请
答案 0 :(得分:0)
答案 1 :(得分:0)
使用
fgets(str, sizeof(str), stdin);
读到行尾。
然后,为了获得整数,您可以使用strtok()
将行拆分为标记,并使用strtol()
答案 2 :(得分:0)
如果你真的想在开始获取输入之前使用scanf()并读取一个数字,你可以这样做:
#include <stdio.h>
int main(void) {
int numbers[128];
int n;
printf("How many numbers to read?\n");
scanf("%d", &n);
int i;
for(i = 0; i < n; ++i) {
scanf("%d", &numbers[i]);
}
for(i = 0; i < n; ++i)
printf("%d\n", numbers[i]);
return 0;
}
输出:
How many numbers to read?
5
1 2 3 4 5
1
2
3
4
5
使用fgets()。使用stdin
。
以下是一个例子:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void) {
char line[256];
char* pch;
int numbers[128];
int N = 0; // actual numbers of numbers read
// to read one line
fgets(line, 256, stdin);
line[strlen(line) - 1] = '\0';
pch = strtok(line, " ");
while (pch != NULL) {
numbers[N++] = atoi(pch);
pch = strtok(NULL, " ");
}
int i;
for(i = 0; i < N; ++i)
printf("%d\n", numbers[i]);
return 0;
}
输出:
1 2 3 4 5
1
2
3
4
5
答案 3 :(得分:0)
为什么OP代码失败:用户输入如 5 输入 a 空格 b 输入。
第一个scanf()
消费"5"
,"\na b\n"
留下scanf()
。由于第一个scanf()
是str
,char
不会扫描任何内容并且不会将任何内容保存到'\n'
。
scanf("%d",&n);
scanf("%[^\n]s",str);
阅读第scanf("%[^\n]s",str);
行有很多问题。
s
"%[^\n]s"
没有理由
如果输入为"%[^\n]"
,则 str
不会将任何内容保存到"\n"
。
无法防止阅读太多数据。
代码应检查scanf()
的返回值。
根据许多人的建议,请使用fgets()
char str[500];
if (fgets(str, sizeof str, stdin) == NULL) HandleEOForIOerror();
// to remove '\n'
size_t len = strlen(str);
if (len > 0 && str[len-1] == '\n') str[--len] = 0;
printf("%s",str);
要阅读该号码,建议使用fgets()
#include<stdio.h>
int main(void) {
int n;
char str[500];
if (fgets( str, sizeof str, stdin) return -1;
if (1 == sscanf(str, "%d",&n)) {
printf("%d\n",n);
}
if (fgets( str, sizeof str, stdin) return -1;
printf("%s",str);
return 0;
}
答案 4 :(得分:0)
scanf("%d",&n);
更改为scanf("%d%*c", &n);
或
scanf("%[^\n]s", str);
更改为scanf(" %[^\n]", str);