C++ 结构和字符
C++ structures and chars
所以,我有这个代码。我对此有一些疑问,我正处于学习 C++ 的开始阶段。
我的问题是:
如何在 scanf 中读取多个名称?
或者当我想读取街道名称 [strada] 时,例如:1 northwood 34/6,当我插入 space 时,它越过该行并进入下一行,我需要更改的内容为了按我的意愿工作?
以及为什么我在初始化时不能打印我的人?
谢谢
//create a struct which represent a person and that person must contain
//firstname lastname age, and adress. adress must contain street city and
//country
//define a function which it will be used for reading a person from keyboard. //define a function which will initialise a person.
//create a function which it will be used for releasing allocated resources for a person.
//create a functon which it will be used for printing the data about a person
// read from the keyboard a collection of persons, arrange those persons decreasing by age using qsort.
#include "stdafx.h"
#include <malloc.h>
#include <stdlib.h>
#include <string>
using namespace std;
struct adresa{char* strada, *oras,*judet;};
struct persoana{char* nume, *prenume;int varsta;adresa adr; };
void trimNewline(char* str)
{
int len = strlen(str);
if (str[len - 1] == '\n')
{
str[len - 1] = '[=10=]';
}
}
void citestePersoana(persoana* pers){
printf("Nume:");
scanf("%s", pers->nume);
printf("Prenume:");
scanf("%s", pers->prenume);
printf("Varsta:");
scanf("%d", pers->varsta);
}
void citesteAdresa(adresa* adr){
printf("Strada:");
fgets(adr->strada, 100, stdin);
trimNewline(adr->strada);
printf("Oras:");
fgets(adr->oras, 100, stdin);
trimNewline(adr->oras);
printf("Judet:");
fgets(adr->judet, 100, stdin);
trimNewline(adr->judet);
}
void initPersoana(persoana* pers){
pers->nume = (char*)malloc(100 * sizeof(char));
pers->prenume = (char*)malloc(100 * sizeof(char));
pers->varsta = (int)malloc(100 * sizeof(int));
}
void initAdresa(adresa* adr){
adr->strada = (char*)malloc(100 * sizeof(char));
adr->oras = (char*)malloc(100 * sizeof(char));
adr->judet =(char*)malloc(100 * sizeof(char));
}
void afispers(){
persoana x;
adresa y;
printf("Nume:%s", x.nume);
printf("Prenume:%s", x.prenume);
printf("Varsta:%s", x.varsta);
printf("Strada:%s", y.strada);printf("Oras:%s", y.oras);
printf("Judet:%s", y.judet);
}
int _tmain(int argc, _TCHAR* argv[]){
persoana persoanaCurenta;
adresa adresaCurenta;
initPersoana(&persoanaCurenta);
initAdresa(&adresaCurenta);
citestePersoana(&persoanaCurenta);
citesteAdresa(&adresaCurenta);
afispers();
return 0;
}
如果要读取带空格的地址,如
1 northwood 34/6
成一串,最好用fgets
代替scanf
。
fgets(adr->strada, 100, stdin);
然后trim换行符。
int len = strlen(adr->strada);
if ( adr->strada[len-1] == '\n' )
{
adr->strada[len-1] = '[=12=]';
}
您可以将该代码放入一个函数中,然后将其重新用于您读取的其他数据。
void trimNewline(char* str)
{
int len = strlen(str);
if ( str[len-1] == '\n' )
{
str[len-1] = '[=13=]';
}
}
然后将其用作:
void citesteAdresa(adresa* adr){
printf("Strada:");
fgets(adr->strada, 100, stdin);
trimNewline(adr->strada);
printf("Oras:");
fgets(adr->oras, 100, stdin);
trimNewline(adr->oras);
printf("Judet:");
fgets(adr->judet, 100, stdin);
trimNewline(adr->judet);
}
所以,我有这个代码。我对此有一些疑问,我正处于学习 C++ 的开始阶段。
我的问题是:
如何在 scanf 中读取多个名称?
或者当我想读取街道名称 [strada] 时,例如:1 northwood 34/6,当我插入 space 时,它越过该行并进入下一行,我需要更改的内容为了按我的意愿工作?
以及为什么我在初始化时不能打印我的人?
谢谢
//create a struct which represent a person and that person must contain
//firstname lastname age, and adress. adress must contain street city and
//country
//define a function which it will be used for reading a person from keyboard. //define a function which will initialise a person.
//create a function which it will be used for releasing allocated resources for a person.
//create a functon which it will be used for printing the data about a person
// read from the keyboard a collection of persons, arrange those persons decreasing by age using qsort.
#include "stdafx.h"
#include <malloc.h>
#include <stdlib.h>
#include <string>
using namespace std;
struct adresa{char* strada, *oras,*judet;};
struct persoana{char* nume, *prenume;int varsta;adresa adr; };
void trimNewline(char* str)
{
int len = strlen(str);
if (str[len - 1] == '\n')
{
str[len - 1] = '[=10=]';
}
}
void citestePersoana(persoana* pers){
printf("Nume:");
scanf("%s", pers->nume);
printf("Prenume:");
scanf("%s", pers->prenume);
printf("Varsta:");
scanf("%d", pers->varsta);
}
void citesteAdresa(adresa* adr){
printf("Strada:");
fgets(adr->strada, 100, stdin);
trimNewline(adr->strada);
printf("Oras:");
fgets(adr->oras, 100, stdin);
trimNewline(adr->oras);
printf("Judet:");
fgets(adr->judet, 100, stdin);
trimNewline(adr->judet);
}
void initPersoana(persoana* pers){
pers->nume = (char*)malloc(100 * sizeof(char));
pers->prenume = (char*)malloc(100 * sizeof(char));
pers->varsta = (int)malloc(100 * sizeof(int));
}
void initAdresa(adresa* adr){
adr->strada = (char*)malloc(100 * sizeof(char));
adr->oras = (char*)malloc(100 * sizeof(char));
adr->judet =(char*)malloc(100 * sizeof(char));
}
void afispers(){
persoana x;
adresa y;
printf("Nume:%s", x.nume);
printf("Prenume:%s", x.prenume);
printf("Varsta:%s", x.varsta);
printf("Strada:%s", y.strada);printf("Oras:%s", y.oras);
printf("Judet:%s", y.judet);
}
int _tmain(int argc, _TCHAR* argv[]){
persoana persoanaCurenta;
adresa adresaCurenta;
initPersoana(&persoanaCurenta);
initAdresa(&adresaCurenta);
citestePersoana(&persoanaCurenta);
citesteAdresa(&adresaCurenta);
afispers();
return 0;
}
如果要读取带空格的地址,如
1 northwood 34/6
成一串,最好用fgets
代替scanf
。
fgets(adr->strada, 100, stdin);
然后trim换行符。
int len = strlen(adr->strada);
if ( adr->strada[len-1] == '\n' )
{
adr->strada[len-1] = '[=12=]';
}
您可以将该代码放入一个函数中,然后将其重新用于您读取的其他数据。
void trimNewline(char* str)
{
int len = strlen(str);
if ( str[len-1] == '\n' )
{
str[len-1] = '[=13=]';
}
}
然后将其用作:
void citesteAdresa(adresa* adr){
printf("Strada:");
fgets(adr->strada, 100, stdin);
trimNewline(adr->strada);
printf("Oras:");
fgets(adr->oras, 100, stdin);
trimNewline(adr->oras);
printf("Judet:");
fgets(adr->judet, 100, stdin);
trimNewline(adr->judet);
}