【发布时间】:2020-05-09 15:34:24
【问题描述】:
所以在 scanf 之后,printf(); 会跳过第一行
我读过一些问题,告诉"%[^\n]" 必须是" %[^\n]" 才能跳过换行符。
我都试过了,但它仍然打印相同的结果,现在我不知道为什么它不起作用。
Example input
Enter number of Materi: 4
Materia 1 name : a
Materia 2 name : b
materia 3 name : c
materia 4 name : d
Output:
Materia - 1 : R╒fu
Materia - 2 : a
Materia - 3 : b
Materia - 4 : c
#include<stdio.h>
#include<windows.h>
int main(int argc, const char *argv[]){
int i;
int V;
printf("Enter number of Materi: ");
scanf("%d", &V); fflush(stdin);
//Insert materia
char materia[V][50];
for(i = 0; i < V; i++){
printf("Materia %d name : ", i+1);scanf("%[^\n]", &materia[i][50]);fflush(stdin);
}
for(i = 0; i < V; i++){
printf("Materia - %d: %s\n", i+1, materia[i]);
}
system("pause");
return 0;
}
【问题讨论】:
-
fflush(stdin)在 c 中是未定义的行为,在 POSIX 或 Windows 定义的情况下无用。scanf("%[^\n]", &materia[i][50])并没有按照你的想法去做。 -
@EOF 它实际上要求在我使用 fflush(stdin); 后进行扫描; ,当我不使用它时,它甚至根本不会扫描
-
你没有(合理地)控制你的输入。你可以控制你的输出。
-
向
"%[^\n]"添加一个空格,使其变为" %[^\n]",这将过滤前导空格。这种格式(或%c)不是自动的。 -
还有一个错误:
&materia[i][50]应该是materia[i]