在scanf开始C程序冻结

时间:2012-02-26 04:56:17

标签: c

我遇到扫描冻结的问题。我环顾四周,虽然有些问题很相似,但他们没有帮助解决我的问题。

main(int argc, char **argv) {
//FILE *stream = stdin;
if (stdin == NULL) {
    printf("Could not open file");
    return 0;
}
int exists = 0;
char letter;
char next = 'H';
char word[30];
int frequency = -1;
int sample = -1;
char  *channels;
channels=malloc(sizeof(7*sizeof(char)));
int bitres = -1;
int secondE = 0;


while (exists == 0) {
    scanf("%c", &letter);   //this is the problem, possibly scanf
    printf("AFTER");
    if (letter == EOF) {
    //  printf(letter);
        printf("HEADER NOT DETECTED");
        return 0;
    }

我使用printf查明了问题。我正在通过命令提示符将另一个文件输入到此程序中。当我到达scanf它只是挂起。如果有人知道解决方案,我会非常感激。

另一方面,使用scanf不良做法?将stdin分配给文件指针同样容易(我实际上已将其注释掉)但scanf看起来同样容易。

2 个答案:

答案 0 :(得分:0)

冻结是什么意思?我运行此代码。当您的代码到达scanf时,它会等待您的输入。你提供一些意见,然后看看会发生什么。

scanf不是一种不好的做法

channels=(char*)malloc(sizeof(7*sizeof(char)));
int bitres = -1;
int secondE = 0;


while (exists == 0) 
{
    scanf("%c", &letter);   // ok
    printf("AFTER");
    printf("\n");
    printf("%c", letter);
    printf("\n");
    if (letter == EOF) {
    //  printf(letter);
     printf("HEADER NOT DETECTED"); }
    return 0;
}

scanf也永远不会返回EOF。

答案 1 :(得分:0)

while (exists == 0) 
{
    scanf("%c", &letter);   // ok
    printf("AFTER");
    printf("\n");
    printf("%c", letter);
    printf("\n");
    if (letter == EOF) {
    //  printf(letter);
     printf("HEADER NOT DETECTED"); }
    return 0;
}

所以在使用时

if (letter == E0F) 
上面的部分有点太字面了。为什么不使用 char 来存储您想要的答案并使用以下内容创建

if(strcmp(letter, *desired char here*) == 0){

考虑到如果你的scanf函数仅在调试时冻结它可能是客户端这一事实只是猜测但是上面的例子在阅读代码时更加用户友好,并且在处理其他字符时不会有任何错误以及整个程序中的整数。取决于你想用它完成的任务。