0
Can anyone point out why the code won't work??
https://code.sololearn.com/cAu2RQ1hzRAK/?ref=app the loop is supposed to execute till the scanf() reads an integer .But weirdly,once it reads a non integer value it goes into an infinite loop without executing scanf() again.
10 Réponses
+ 4
int n;
char chk;
if(scanf("%d%c", &n, &chk) != 2 || chk != '\n')
printf("Invalid Input");
else
printf("valid input");
this is a greedy method to test the input but, i haven't tried it in loop, try this if it helps,
if this won't workout, then in my knowledge there's no other way in C
+ 2
You can't do anything to solve this, for int type variable user is supposed input an integer value but if you'll enter any character then it will assign a garage value not only for this variable, but for all upcoming inputs(scanf), (irrespective of their type)
that's why it's going into an infinite loop
+ 2
For c, it's bit lengthy... read input as string... try to convert the same into integer and just come to know whether input was int or not based on conversion status...
below is the easiest way in c++ to achieve the same:
int a;
cin >> a;
if(cin.fails())
{
// your code when user entered value other than int
}
+ 2
in your updated code, scanf is culprit...
replace with line:
scanf("%c",&i);
just note that sololearn doesn't take input interactively... all input to be given by space seperated in single go... for example, w 2 or 3..
I checked with above two input and it works with a single line update in your code
+ 1
@Nikhil Dhama:so, are you saying that input verification is not at all possible in c??😢
+ 1
thanks,will try👍
0
unfortunately, scanf returns 1 if input was "23s"...
0
#include <stdio.h>
//for single digit int
int main()
{
char i;
do
{
scanf("%c",i);
if((i-48)>9||(i-48)<0)
printf("invalid input\n");
//checks if i is integer
}while((i-48)>9||(i-48)<0);//loop "should"work until scanf() reads an integer
printf("%c",i);
return 0;
}
still the same output!!😢
0
the thing is I can check if the input is integer or not but I can't prompt the user to give another value in the same execution!!
0
sry,that was an accident!😅(&i).And the problem still exist in an interactive environment.i.e.,if you give the first input as a non integer value, it won't wait for user to enter the next value when control reaches the scanf() (or get char()) ,it just takes the next value in buffer.
input :error5
output:
invalid input
invalid input
invalid input
invalid input
invalid input
5
(five "invalid input" for each letter in error,even in interactive input mechanism!!)