Программа на C не распознает пробел - PullRequest
0 голосов
/ 26 сентября 2019

У меня проблема с домашним заданием в C, когда пользователь вводит символы (только из z или пробела) и возвращает значение ASCII.Код работает нормально, если это только символы, но когда я пытаюсь ввести пробел, он не возвращает число 32. Любая помощь будет фантастической!

#include <stdio.h>

char buf[128];

int main(int argc, char *argv[]) {
    buf[127] = 0;
    char *line = argv[1];
    int i;
    int j;
    i = 0;
    j = 126;
    while((line[i] >= 'a' && line[i] <= 'z') || (line[i] == ' ')){
        buf[j] = line[i];
        printf("%d", buf[j]);
        printf(" ");
        i++;
        j--;
    }
    return 0;   
}

Нет сообщений об ошибках.Например, если я ввожу строку «привет», она возвращает «104 101 108 108 111», но если я ввожу «привет, ребята», она также возвращает «104 101 108 108 111» и останавливается на пробеле.

Ответы [ 2 ]

4 голосов
/ 26 сентября 2019

Это не работает, потому что ваша программа использует только аргументы командной строки (вместо чтения из stdin, чего ожидает большинство домашних заданий C), и большинство оболочек разделяет аргументы командной строки по пробелам, если они не заключены в кавычки.

Итак, это:

.\myprogram foo bar

Будет представлено как:

argc == 3
argv[0] == "(path)/myprogram"
argv[1] == "foo"
argv[2] == "bar"

Но это:

.\myprogram "foo bar"

Будет представлено как:

argc == 2
argv[0] == "(path)/myprogram"
argv[1] == "foo bar"
2 голосов
/ 26 сентября 2019

В вашем коде нет ничего плохого в отношении пробела.Однако используемый вами интерпретатор командной строки (cmd32.exe в Windows ?, bash в Linux?) Рассматривает пробел как завершение параметра: если вы пишете

yourprogram hello world

«Привет» переходит кargv[1], но "мир" уходит в argv[2] ... а пространство в никуда.Попробуйте с помощью

yourprogram "hello world"

Использование кавычек говорит интерпретатору рассматривать всю строку «hello world» как один параметр.

В вашем коде есть и другие вещи: вы заполняетеbuf ничего не делая с этим.Вы также наполняете его со спины, в чем причина?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...