这是一个接受 std 输入并显示以换行符结尾的 72 个字符的程序 如果输入的数量小于 72,则必须附加终止空字符,如果我打印缓冲区,我会得到垃圾值。这里出了什么问题
int main() {
int buffer[ MAX_CHAR ];
int count = 0, ch = 0, i = 0;
while( (ch = getchar() != '@') ) {
// Buffer used to collect the i/p characters from the std i/p
buffer[count++] = ch;
if( MAX_CHAR - 1 == count ) {
buffer[ MAX_CHAR + 1 ] = '\n';
for(i = 0; i < MAX_CHAR; i++)
printf("%c", buffer[i]);
count = 0;
buffer[ MAX_CHAR ] = 0;
}
}
//If the input character is less than 72, then append the rest with spaces
if( count != MAX_CHAR - 1) {
for(i = count; i < MAX_CHAR - 1; i++)
buffer[ count ] = ' ';
buffer[ MAX_CHAR ] = '\n';
for(i = 0; i < MAX_CHAR; i++)
printf("%c", buffer[i]);
}
}
最佳答案
你有:
while( (ch = getchar() != '@') ) {
这将被解析为:
while( (ch = (getchar() != '@')) ) {
因此 ch
的值为 0 或 1。您想要的是:
while( ((ch = getchar()) != '@') ) {
此外,通过在缓冲区末尾写入内容,您在某些地方会出现未定义的行为:
int buffer[ MAX_CHAR ];
...
buffer[ MAX_CHAR + 1 ] = '\n';
...
buffer[ MAX_CHAR ] = 0;
关于c - 当我打印缓冲区中的内容时,我的代码打印垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17660026/