我需要能够检测到无关的输入并退出我的程序。
如果我将一个超过1个字符串的字符串输入<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<table id="one">
<th>Date</th>
<th>Skip days</th>
<th>Result</th>
<tbody>
<tr>
<td>
<input type="date" class="date"></td>
<td><input type="text" value="10" class="day"> </td>
<td><input type="text" class="result"> </td>
</tr>
<tr>
<td>
<input type="date" class="date"></td>
<td><input type="text" value="15" class="day"> </td>
<td><input type="text" class="result"> </td>
</tr>
<tr>
<td>
<input type="date" class="date"></td>
<td><input type="text" value="last" class="day"> </td>
<td><input type="text" class="result"> </td>
</tr>
</tbody>
</table>
,它会收取第一个字母并将其存储到var中,但程序会继续。
我尝试使用scanf("%c", &var);
但每次无论输入都返回1,所以没有区别。
我知道其他函数如fgets()可能更适合这个但我已被指示使用scanf()函数。
我该怎么做?
答案 0 :(得分:0)
当读取用户输入时,scanf可以从文件或控制台获取其输入。
从控制台读取时,只有添加换行符时,程序才能使用该数据。这意味着读取在同一行上输入的任何内容。
想象一下,我有一个迷宫程序,它希望我选择走哪条路......
while( !atGoalLocation() ) {
printf( "Which direction (f)orward (l)eft (r)ight?\n" );
scanf( "%c", &dir );
processDirection( dir );
}
我可以通过迷宫进入路线
f
l
f
r
f
f
或者输入我的输入
也可能是正确的flfrff
根据您的任务,它们可能意味着同样的事情。
如果您想允许这些输入中的任何一个,那么请确保通过添加&#34;来占用空白区域。 &#34;到scanf。
if( scanf( " %c", &dir ) == 1 )
如果换行版本是您想要接受的唯一方法,那么您应该将这些行分开,然后尝试扫描。
char line[200];
while( fgets( line, sizeof( line ), stdin ) != NULL ){
sscanf( line, "%c", &dir );
对于C ++,我们应该使用std::cin
和std::cout
。但是同一行中未读字符会出现同样的复杂情况,因此我仍然会使用基于行的解析器。
std::string line;
while( std::getline( std::cin, line ) ){
// here we could parse the line using std::strstream to decode more complext things than a char.
dir = line[0];
答案 1 :(得分:0)
您需要在%c
之前添加一个空格:
scanf(" %c",&var);
答案 2 :(得分:-1)
如果您不希望程序在输入字符后等待输入,请使用“conio.h”中定义的getch()
c = getch();
OR
在scanf(“%c”,&amp; var)中;您可以在%c之后添加换行符\ n以吸收额外的字符。
scanf("%c\n",&in);