2016-05-12 4 views
2
#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 

    int agecalc; 
    int nextyr; 
    int birthday; 
    int currentday; 
    int agecalcu; 
    int randomnumbers; 

    birthday = 1987; 
    currentday = 2016; 
    nextyr = currentday + 1; 
    agecalc = currentday - birthday; 
    randomnumbers = 7890; 

    char My[] = "Sayan Banerjee"; 

    printf("%s 's birthday is %.3d \n", My , agecalc); 

    agecalcu = agecalc + 1; 

/* alternatively I can use one int and change the variable stored in agecalc by stating that 
agecalc = currentday - birthday +1; But I think that is just messy and disturbs a lot of code. declaring a new int is 
better and less intrusive. this way when I may need to use agecalc again, i dont have to worry about the value stored in that 
variable. */ 

    printf("%.5s will turn %.3d on %d.\n \a", My , agecalcu , nextyr); 

    printf("The username for %s is %.6d \n", My , randomnumbers); 
    // the thing here is that I cannot shorten a value stored in a value unless its in an array 
    // but I can express it in other ways like 1 to 01. 
    /* The thing is that I cannot store two %s in one argument/code. this freezes the code. better way would be to 
    create another variable and then try to edit that.*/ 

    //this is an experiment to see whether I can take characters from an array and store it in a variable 
    int user; 


    My [0,1,2,3,4,5] = user; 

    printf("%s is also %s", My , user); 


    return 0; 
} 

Главный вопрос, который у меня есть, находится в последней строке. Я новичок в кодировании и только что начал учиться. Я просто играл и замечал, что если я добавлю два %s в том же аргументе, тип программы будет аварийным. Итак, я думал, могу ли я взять определенные символы в массиве My и сохранить их в переменной, а затем распечатать?Как взять символы из массива и сохранить их в переменной?

Возможно ли это? или я просто смотрю на это не так? Извините за грязный пост. Спасибо за вашу помощь.

+0

также, комментарии там, только то, что я обнаружил, мастерить вокруг. Возможно, я ошибаюсь в том, что написал, но я просто написал все это. Спасибо за ваше терпение! – returnNULL

+0

Добро пожаловать в StackOverflow. Пожалуйста, прочитайте [страницу по форматированию] (https://stackoverflow.com/editing-help), таким образом, ваш вопрос не будет таким «грязным». Также имейте в виду, что вы всегда можете отредактировать свой вопрос. – Zeta

+0

Кстати, если 'x = y' присваивает значение' y' 'x', ваш' My ... = user' имеет смысл для вас? (У меня нет времени на полный ответ в данный момент, извините). – Zeta

ответ

1

My [0,1,2,3,4,5] = user;

Эта линия эквивалентна говоря

My[5] = user;

Это из-за comma оператора

//this is an experiment to see whether I can take characters from an array and store it in a variable 

Вы можете. Но то, что вы делаете прямо сейчас, назначает не назначенное значение элементу 5th массива My. int val = My[5] прекрасно, но не наоборот.

Катастрофа происходит потому, что ваш код пытается интерпретировать целое как null terminated string из-за %s спецификатора формата, который вы дали

printf("%s is also %d", My , user); // %d for integers 

Ваш код в текущем состоянии находится в Undefined Behavior земле.

Чтобы скопировать определенные символы из существующего массива в целевой массив, вам понадобится более одной переменной. Одна переменная будет содержать только один символ.

char user[6]; 
user[5] = '\0'; // fill the last character as null to be a valid C string 
user[0] = My[0]; 
user[1] = My[1]; 
user[<any other index you want>] = My[<The index you want>]; 

Вы можете сэкономить много энергии, времени и усилий, просто используя функцию из string.h, который имеет кучу утилита для работы со строками. Вероятно, что вам нужно для вашей текущей проблемы: strncpy

Как ортогональное предложение, скомпилируйте свой код с самым высоким уровнем предупреждения, поддерживаемым вашим компилятором. Компилятор будет выкрикивать эти проблемы во время компиляции.

Для например gcc -Wall filename.c

+0

, когда я пытаюсь использовать int val = My [5], тогда выход выходит, поскольку Sayanpbanerjee также @. И если я возьму вашу другую идею, тогда выход будет Sayanpbanerjee также 4200816. Теперь я могу ошибаться, но разве мы не можем сохранить «строки или текст» в переменной int? Тогда почему это дает мне такой странный результат? – returnNULL

+0

BTW, английский не мой первый язык, поэтому я как бы путешествую вверх, объясняя вещи. Первоначальная цель кода заключалась в том, чтобы взять определенные буквы в массиве, а затем поместить их в переменную, а затем попытаться запустить ее в коде. – returnNULL

+0

@SayanBanerjee обновил мой ответ, чтобы ответить на ваш комментарий. – bashrc

0

Следующая строка не делать то, что вы думаете:

это:

My [0,1,2,3,4,5] = user; 

фактически то же самое, как это:

My [5] = user; 

Читайте о comma operator.

В любом случае, вы не можете хранить весь массив My в одной переменной int.


Здесь используется %s для печати user, которая не является char* но int

printf("%s is also %s", My , user); 

Это приводит к непредсказуемому поведению, скорее всего, сбой на современных системах.


Что касается вашего вопроса, это немного неясно, может быть, вы хотите:

#include <string.h> 
... 
char user[20]; 
strcpy(user, My); 

printf("%s is also %s", My , user); 

, который будет печатать:

Sayan Banerjee is also Sayan Banerjee 
+0

Прежде всего. Спасибо за помощь! Я немного знал о strcpy, я не знаю, почему я не использовал его сам. ну код работает, и я могу сохранить его до 15. Так почему вы указали 20? Это не то, что я хотел изначально, и редактирование размера байта в пользователе для чего-либо ниже 15 не дает результата, который я ищу. Я ищу, чтобы вывести определенные символы из массива: возможно, B, N, J, R, S и поместить его в переменную. Есть ли способ сделать это? Еще раз спасибо за ваше терпение! – returnNULL

Смежные вопросы