Почему этот инструмент не печатает строки? - PullRequest
0 голосов
/ 17 августа 2011

этот инструмент для меня, чтобы научиться работать со строками.но если он закончился, иногда он должен сравнить две даты (системную дату и введенную дату рождения) и сообщить пользователю, сколько лет человеку.но я застреваюСначала я хотел попробовать некоторые основы, поэтому введенная строка разбивается на день, месяц и год, а затем она должна распечатать строки.Но моя настоящая цель состоит в том, чтобы преобразовать их в значение типа int, чтобы я мог вычислить их.

Но по некоторым причинам инструмент не печатает введенную строку, он просто печатает 3 \n, и яне могу разобраться в проблеме.

, пожалуйста, помогите.

edit: исправлено, почти готово, только "btag" создает некоторые проблемы."bmonat" и "bjahr" теперь отлично работают, спасибо, пока!

/*age check (c) By Tim Hartmann*/


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#include <string.h>

int main ()
{
SYSTEMTIME time;
GetSystemTime (&time);

char name[20], bday[10], bjahr[4], bmonat[3], btag[3]; 

int year = time.wYear;
int month = time.wMonth;
int day = time.wDay;
int intjahr, intmonat, inttag;


printf("\n\n today is the: %i.%i.%i \n\n",day,month,year);
printf(" please insert Birthdate (dd.mm.jjjj).\n\n");

gets(bday);

strncpy(bjahr , &bday[6], 4);
    bjahr[4] =  '\0';

strncpy(bmonat, &bday[3], 2);
    bmonat[2]=  '\0';        

strncpy(btag  , &bday[0], 2); /* here is the probleme */
    btag[2]  =  '\0'; 

printf("\n %s \n",   bjahr);
printf("\n %s \n",  bmonat);
printf("\n %s \n",    btag);

system("PAUSE");

 }

Ответы [ 2 ]

0 голосов
/ 17 августа 2011

Есть несколько вещей не так с этим. Для начинающих, бьяр [4] = 0; bmonat [2] = 0; btag [2] = 0;

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

Другое дело, что вы, вероятно, хотите

bjahr[4] =  '\0';
bmonat[2]=  '\0';
btag[2]  =  '\0';

Вместо этого, поскольку это дает вам нулевые символы вместо 0.

0 голосов
/ 17 августа 2011

В объявленных вами строках (bday, bjahr, bmonat, btag) отсутствует 1 символ для хранения \ 0

btag, например, должен быть btag [3], особенно если вы делаете btag[2] = 0 позже в источнике

Можете ли вы попробовать добавить еще 1 символ во все строки и проверить, исправляет ли он все?


Это должно выглядеть так:

char name[21], bday[11], bjahr[5], bmonat[3], btag[3];

если вы хотите максимум 20 символов для имени, 10 для bday, ...

затем при извлечении даты:

strncpy(btag, &bday[0], 2);
    btag[2] = '\0';

Таким образом, вы копируете 2 символа из bday в btag (начиная со смещения 0), а затем устанавливаете 3-й символ в '\ 0', чтобы завершить строку

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