Я хочу читать целые числа из стандартного ввода
Выполнение
while (1){
char a;
scanf("%c",&a);
printf("%c",a);
if (a=='\r'||a=='\n'){
break;
}
}
Вы читаете строку, содержащую любые символы, а не толькопредставление чисел
Выполнение
while(1){
char a[10];
gets(a);
if (a=='\r'||a=='\n'){
break;
}
}
a - это char*
, поэтому в a=='\r'||a=='\n'
вы ошибочно сравниваете указатель с символами, выхочу *a=='\r'||*a=='\n'
Дополнительные замечания:
- никогда использование получает , использование fgets для чтения строкитак что
fgets(a, sizeof(a), stdin)
- но вы все равно читаете строку, содержащую любые символы, а не только число
Я хочу читать целые числа из стандартного ввода (пользовательский ввод),каждая строка стандартного ввода содержит целое число, а пустая строка обозначает конец ввода.
Предложение, строка, содержащая только пробел и символы табуляции перед концом строки, считается пустым, а пробелыи вкладки до / после числа игнорируются, не считаясь недействительными:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <ctype.h>
int main()
{
while(1) {
puts("enter number");
char a[10];
if (fgets(a, sizeof(a), stdin) == NULL) {
puts("EOF");
break;
}
errno = 0;
char * endptr;
long n = strtol(a, &endptr, 10);
if (errno != 0) {
puts("not a valid long");
}
else {
/* check possible unexpected characters */
char * p = endptr;
for (;;) {
if (*p == 0) {
if (endptr == a) {
puts("done");
return 0;
}
printf("the number is %ld\n", n);
break;
}
if (!isspace(*p++)) {
puts("not (only) a valid long");
break;
}
}
}
}
}
Компиляция и выполнение:
pi@raspberrypi:/tmp $ gcc -pedantic -Wextra n.c
pi@raspberrypi:/tmp $ ./a.out
enter number
123
the number is 123
enter number
123
the number is 123
enter number
12a
not (only) a valid long
enter number
a12
not (only) a valid long
enter number
a
not (only) a valid long
enter number
done