我正在研究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数组的一行中的值。但是我得到了一些意想不到的结果,我不知道原因。需要帮助。
答案 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';