在发布之前,我已经尝试了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);
}
答案 0 :(得分:3)
尝试删除&#39; \ n&#39;来自scanf,像这样:
scanf ("%i",&x);
有关使用&#39; \ n&#39;的其他信息,请查看此讨论。在scanf中: