Неправильный ввод сложения - PullRequest
1 голос
/ 05 августа 2020

Это программа:

#include<stdio.h>

int main(){
    int n;
    static int x=0;
    scanf("%d",&n);
    int i,k=n;
    for(i=0;i<k;++i)
    {
        printf("%d,%d   ",i,k);
        char s[3];
        scanf("%s\n",s);
        char st=s[1];
        if (st=='+') {++x;}
        else{--x;}
    }
    printf("%d\n",x);
    return 0;
}

Если я ввожу 3, я должен ввести 3 строки, но мне нужно ввести дополнительную.

Пример исполнения:

4
0,4   ++x
++x        //my problem is here, what why should I type this one?
1,4   ++x
2,4   --x
3,4   ++x
2

1 Ответ

1 голос
/ 05 августа 2020
  • char s[3]; слишком короткое для хранения трехсимвольных строк. Выделите еще один элемент для завершения нулевых символов.
  • \n в строке формата scanf() будет читаться до следующего непробельного символа, поэтому будет казаться, что запрашивается дополнительный ввод.
  • Вы должны ограничить длину чтения, чтобы избежать переполнения буфера.
#include<stdio.h>
int main(){
    int n;
    static int x=0;
    scanf("%d",&n);
    int i,k=n;
    for(i=0;i<k;++i)
    {
        printf("%d,%d   ",i,k);
        char s[4]; /* allocate enough elements */
        scanf("%3s",s); /* remove \n and limit input length */
        char st=s[1];
        if (st=='+') {++x;}
        else{--x;}
    }
    printf("%d\n",x);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...