#c
#c
Вопрос:
Я пытаюсь прочитать только первый символ каждой строки, используя scanf.
С помощью этого ввода:
файл c: myciel3.col
источник c: Майкл Трик (trick@cmu.edu )
описание c: График, основанный на преобразовании Мичельского.
без треугольника c (номер клика 2), но увеличивающийся
номер раскраски c
p edge 11 20
Извините за мой плохой английский.
int main(int argc, char *argv[]) {
char option;
int countC = 0;
int countP = 0;
while(scanf("%c",amp;option) != EOF) {
if(option == 'c') countC ;
else if (option == 'p') countP ;
}
printf("c: %dtp: %dn",countC, countP);
return (0);
}
Я ожидаю, что на выходе будут C: 5 и P: 1, но фактический результат — c: 15 p: 2
Комментарии:
1. Это настоящее имя и адрес электронной почты? Если это так, было бы разумно анонимизировать их.
2.@Broman
scanf()
может вернуть EOF.3. Почему бы просто не использовать
getchar()
?scanf()
является излишеством для чтения одного символа за раз.4. @Shawn Я остаюсь исправленным. Я был так уверен, что это всегда неотрицательное значение, указывающее количество успешных назначений, но я ошибался.
Ответ №1:
Ваш код считывает каждый символ вашего ввода, а не первый символ каждой строки.
Используйте fgets
или любую другую функцию, которая получает строку.
#include <stdio.h>
int main(int argc, char *argv[]) {
char option[255];
int countC = 0;
int countP = 0;
while(fgets(option, 255, stdin) != NULL) {
if(option[0] == 'c') countC ;
else if (option[0] == 'p') countP ;
}
printf("c: %dtp: %dn",countC, countP);
return (0);
}
Комментарии:
1. Запрос. Если теперь я хочу получить два числа из «p edge 11 20». else if (option[0] == ‘p’) { sscanf(option, «%d», amp;v); }
2. допустим, есть
n1, n2
целочисленная переменная:sscanf(option, "p edge %d %d", amp;n1, amp;n2);