Другие языки программирования и технологии

C почему у меня массив на 4 символа, а я ввожу 10 например, и он потом выводит 10 из этого массива, вот мой код:

#include "stdafx.h"
#include<locale.h>
#include<conio.h>
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "RUSSIAN");
char si[3]={0};
char s[10]={""},s1[10]={""};
int r=0,r1=0,r2=0;
float a;
printf("введите a:\n");
scanf("%s", si);
printf("%s\n", si);
getch();
}
#include <stdio.h>
#include <locale.h>
#include <conio.h>
int main () {
unsigned char a[4] = {0};// Обяъвили символьный массив, размером на 4 символа
setlocale(LC_CTYPE, "Russian_Russia.1251");
printf("Введите a: ");
setlocale(LC_CTYPE, "English_United States.866");
scanf("%s", a); // Теперь можно ввести строку, без пробелов, длиною в 3 символа.. .
setlocale(LC_CTYPE, "Russian_Russia.1251");
printf("Вы ввели: ");
setlocale(LC_CTYPE, "English_United States.866");
printf("%s", a); // ...и вывести её!
getch();
return 0;
}

Какие будут вопросы по теме?
Antonis Tsilenteris
Antonis Tsilenteris
70 099
Лучший ответ
Во-первых, у тебя НЕТ НИ ОДНОГО массива на 4-ре символа.
Во-вторых, а в чём вопрос то ?

ЗЫ. И вообще, половину кода — выкинуть, он не используется.
я на си не програмирую ))) для этого у меня ДЕЛФИ ЕСТЬ, намного понятней.
попробую расшифровать программу, а вдруг угадаю:

char si[3]={0}; ------СИ - массив цифр из 3 ячеек
char s[10]={""},s1[10]={""}; ---массивы текста по 10 ячеек
int r=0,r1=0,r2=0; - переменные, не использовались )))
float a; ----а типа дробная наверно ?
printf("введите a:\n"); - вывело текст на экран
scanf("%s", si); ----запросило значения в массив СИ
printf("%s\n", si); -----вывело значения массива СИ
getch(); ----жду нажания клавиши (пауза)

да и вопрос у тебя звучит некорректно, непонятно что ты делаешь, что хочешь, а что в итоге вышло
поясни толково

попробуй вводить значения вручную
scanf("%s", si[1]);
scanf("%s", si[2]);
scanf("%s", si[3]);
и т. д.
так же и выводить

смотрю на код языка СИ++ --черт ногу сломит, пипец.
Ассемблер легче.
Зорикто Ринчинов >> scanf("%s", si[1]);
камрад, заканчивал бы ты с советами :), массивы в C с нуля индексируются, а не с единицы как в Delphi обычно, scanf получает адреса переменных, т.е. ей нужен PChar а не Char - в твоих терминах! ;)

>> смотрю на код языка СИ++ --черт ногу сломит, пипец.
Приведи прямо тут в комменте пример форматированного на Delphi и я признаю что там все выглядит лучше. Не поверишь, в delphi делают тоже самое, а не используют write, writeln
10 чего? число 10? он записывает в массив '1', '0', '\0' - это null terminated строка, следующей командой ты ее вы выводишь. или 10 символов? тогда ты залезаешь в память которая тебе не принадлежит, поведение программы в этом случае не определено и опасно, подобные ошибки приводят к stack corruption эксплойтам, но т. к. у тебя тут пара команд, то не исключено, что прокатывает, хотя компилятор должен исходить желчью по-идее.
не понятно, интересно что тут и видимо никто не знает