输入:9表示法
printf("Input N value\n");
scanf("%d",&N);
char X[N];
int i=0,N=0;
for (i=0;i<N-1;i++)
{
scanf("%c",&X[i]);
}
X[N-1]='\0';
for (i=0;i<N-1;i++)
{
printf("%c",X[i]);
}
预期输出:符号 输出:notatio
为什么会这样?
答案 0 :(得分:1)
当您使用第一次scanf调用读取长度时,在输入缓冲区中留下换行符。
在第二次scanf调用时,读取的第一个字符是换行符,然后是其余字符。在第二个scanf字符串参数中的%c之前添加空格将消耗任何左侧换行符。
scanf(" %c",&X[i]);
在打印之前,您也不会将字符串终止。
X[N-1] = '\0' ;
答案 1 :(得分:0)
你不必在for循环中减去1,否则最后会丢失1个字符!
这应该有效:
#include <stdio.h>
int main() {
int charNumber, charCount;
printf("Input N value\n>");
scanf("%d", &charNumber);
char text[charNumber+1];
for (charCount = 0; charCount < charNumber; charCount++)
scanf(" %c", &text[charCount]);
text[charNumber] = '\0';
for (charCount = 0; charCount <= charNumber; charCount++)
printf("%c", text[charCount]);
return 0;
}
您还可以使用以下字符打印字符串:
printf("%s", text);