0

每当用户输入管道“|”时,我都会遇到一些问题 字符输出变得全部损坏,我已经尝试刷新缓冲区无济于事。

#include <stdio.h>

int main(int argc, char **argv)
{
    char userInput[2000];
    while(1)
    {
        printf("Please Enter Your Input:");
        scanf("%s", userInput);
        printf("%s\n", userInput);
    }
    return 0;
}
4

1 回答 1

2

您可以做几件事来调试它。First - 读入整个输入行,而不是第一个单词。做到这一点的安全方法是getline()- 如果输入缓冲区的行太长,它会注意到,并进行调整(感谢 Elchonon Edelson 更新)

char *myString;
int stringLength;
size_t bufLength=0;
myString = NULL; // let getline() adjust the string
stringLength = getline(&myString, &bufLength, stdin)

接下来,打印输入的行:

printf("The line is <<%s>>\n", myString);

请注意使用<<and>>来显示字符串的开始/结束位置 - 请参阅空格等。

最后,一次打印出一个字符的字符串,包括十六进制代码:

for(ii = 0; ii < stringLength; ii++) {
  char ch;
  ch = myString[ii];
  printf("myString[%d]: character '%c', hex code %02x\n", ii, ch, ch);
}

这应该可以帮助您查明问题。

于 2013-10-16T02:12:54.640 回答