C-Program - 额外进入终端计划

时间:2016-03-29 09:35:41

标签: c scanf

在发布之前,我已经尝试了C上提到的任何人来解决我的问题,但它还没有奏效(即:添加fgets& sscanf代替scanf,添​​加getchar ()最后(不是一个好习惯)等等,但没有任何效果。

这个小样本是我正在为一个更大的项目工作的一段代码(我通常写一小部分,因此故障排除更容易),我有一个奇怪的问题,就是必须进入'对单个用户输入的响应两次,以运行(和退出)程序。第二个数字是什么并不重要,因为第一个答案是值和写入文件的那个(例如,我输入' 2'然后再次显示提示,所以我输入' 4',但只有正确输入' 2'的结果才会输入到输出文件中)。整个程序运行良好,除了我必须输入一个值以使程序运行(并因此结束)。一个空间没有得到它,只是输入没有得到它(它将继续提示,直到它获得第二个数字条目)。您必须输入一个值才能终止该程序。有谁看到原因(代码如下)? (FWIW,代码运行正常,并给出了正确的值,并为我的程序提供了更大的目的 - 如果我可以在提示符下停止所需的额外值)。

有趣的是,如果我删除最后一个' return(0)'从程序中,它将获取为x输入的最后一个值(我得到的两个提示)并将结果存储在输出文件中,而不是第一个提示值。保留它,它将存储第一个。

我之前从来没有遇到过这个问题,也无法解释为什么它会向我提出两个回应来提示(并结束)该程序。

任何人都会看到我显然对此视而不见的事情? (这是C,在Linux上编译,并且经过测试除了明显的双重提示问题之外的其他工作')

感谢。

#include <stdio.h>
#include <stdlib.h>

int main()

{

    FILE *encfile;
    int x;
    char val001[]="AAAA";
    char val002[]="AAAB";
    char val003[]="AAAC";
    char val004[]="AAAD";

    encfile = fopen("encoded.enx","w");
                      //opens output file "encfile" in write mode

    printf ("Enter a value from 1 - 4: \n");
                      //prompts for user choice
    scanf ("%i\n",&x);
                      //takes value of 1-4 prompt from user

    if (x == 1)
                      //if input is '1', 

    {
       fprintf(encfile,"%s\n", val001);
                      //prints val001 to file 'encfile'
        return (0);

    }

    if (x == 2)
                      //if input is '2', 

    {
       fprintf(encfile,"%s\n", val002);
                      //prints val002 to file 'encfile'
        return (0);

    }

    if (x == 3)
                      //if input is '3', 

    {
       fprintf(encfile,"%s\n", val003);
                      //prints val003 to file 'encfile'
        return (0);

    }

    if (x == 4)
                      //if input is '4', 

    {
       fprintf(encfile,"%s\n", val004);
                      //prints val004 to file 'encfile'
        return (0);

    }

    else
    if ((x << 1) || ( x >> 4))
                      //if input selection is out of range, 

    {
        printf("You have chosen an invalid number\n");
                     //prints 'out of range' message
        return (0);
    }

    fclose (encfile);
                     //write file closed

    return (0);                                             

}

1 个答案:

答案 0 :(得分:3)

尝试删除&#39; \ n&#39;来自scanf,像这样:

scanf ("%i",&x);

有关使用&#39; \ n&#39;的其他信息,请查看此讨论。在scanf中:

Using “\n” in scanf() in C