我是编程新手。当我在扫描整数后输入char数组时,让我感到困惑。它工作不正常。 代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a[30];
int x,y;
scanf("%d",&x);
scanf("%[^\n]",a);
scanf("%d",&y);
printf("%d\n%s\n%d",x,a,y);
return 0;
}
答案 0 :(得分:2)
问题源于white spaces
。在scanf("%d",&x);
后,最后输入的'\n'
字符被保存并保存a
的字符串scanf("%[^\n]",a)
。
为了避免这种情况,请在scanf()
声明中添加空格
scanf(" %[^\n]",a);//give a space
为什么要留出空间?
通过提供空格,编译器会消耗
'\n'
个字符或任何字符 上一个'\0'
的其他空格('\t'
,' '
或scanf()
)
您的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a[30];
int x,y;
scanf("%d",&x);
scanf(" %[^\n]",a);//give a space
scanf("%d",&y);
printf("%d\n%s\n%d",x,a,y);
return 0;
}
答案 1 :(得分:1)
将scanf("%[^\n]",a);
替换为scanf(" %99[^\n]", a);
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a[30];
int x,y;
scanf("%d",&x);
scanf("%s",a); // get char array without inputing space
scanf(" %99[^\n]", a); // get char array, allowing inputing space
scanf("%d",&y);
printf("%d\n%s\n%d\n",x,a,y);
return 0;
}
答案 2 :(得分:1)
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a[30];
int x,y;
scanf("%d",&x);
fflush(stdin);
scanf("%[^\n]",a);
fflush(stdin);
scanf("%d",&y);
printf("%d\n%s\n%d",x,a,y);
return 0;
}
这也有效。同样在这里,最后的/ 0加起来进行字符扫描并干扰。使用fflush(stdin)
将丢弃任何不必要的输入数据,包括/ 0。
如果我错了,请纠正我,因为我也是编码的新手。 :P
答案 3 :(得分:0)
而不是%d
使用%d\n
来使用换行符,以便以下命令不会只读取任何内容:
scanf("%d\n",&x);
scanf("%[^\n]",a);
scanf("%d",&y);
printf("%d\n%s\n%d",x,a,y);