在循环内的一行中获取输入

时间:2015-02-04 04:38:42

标签: c

我正在研究c编程问题。在我必须得到的问题 一行中有两个字符。我必须重复这个过程n次。请考虑以下代码:

char c[100],p[100];
int n;
scanf("%d",&n);
for(int i=0; i<n; i++)
    scanf("%c %c", &c[i], &p[i]);

我使用此代码获取n的值,然后获取c和p数组的一行中的值。但是我得到了一些意想不到的结果,我不知道原因。需要帮助。

2 个答案:

答案 0 :(得分:1)

scanf("%c %c", &c[i], &p[i]);

应该是

scanf(" %c %c", &c[i], &p[i]);

输入值n末尾有换行符,因此您需要在%c

之前放置一个空格来忽略它

请注意,n的值应为n<=100,否则您的数组将超出绑定访问权限。

确保在扫描完字符或

后终止字符串为空
char c[100] = "";
char p[100] = "";

在C中,有效字符串应为空终止。

如果您正在寻找基于n大小的VLA(可变长度数组),那么将您的数组作为

scanf("%d",&n);
char c[n];
char p[n];
for(int i=0; i<n-1; i++)
scanf(" %c %c", &c[i], &p[i]);

答案 1 :(得分:0)

在将字符读入字符数组后,必须存储空值。

char c[100],p[100];
int n;
scanf("%d",&n);
for(int i=0; i<n; i++)
    scanf("%c %c", &c[i], &p[i]);
c[i] = '\0';
p[i] = '\0';