BEGINNER - Printf不打印我的代码的全部内容

时间:2017-06-09 18:00:53

标签: c printf

int main() {

    char letra = 'B';
    int numero = 10;
    float virgulas = 10.5;
    char casa = 'Esquina';

    printf("%c \n",letra);
    printf("%d \n",numero);
    printf("%f \n",virgulas);

    printf("Letra %c, numero %d, em uma %c\n", letra, numero, casa);

    return 0;
}

当我运行我的代码时," Esquina"每次都显示为随机数。

2 个答案:

答案 0 :(得分:3)

<DataGrid ItemsSource="{Binding MasksSourceListBound.MaskDetails}" > <DataGrid.Columns> <DataGridTextColumn Binding="{Binding OtherTestProperty}" /> <DataGridComboBoxColumn Header="Test" SelectedItemBinding="{Binding SelectedItem}" > <DataGridComboBoxColumn.ElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource" Value="{Binding DataContext.MasksSourceListBound.ListParts, RelativeSource={RelativeSource AncestorType=DataGrid}, PresentationTraceSources.TraceLevel=High}" /> </Style> </DataGridComboBoxColumn.ElementStyle> <DataGridComboBoxColumn.EditingElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource" Value="{Binding DataContext.MasksSourceListBound.ListParts, RelativeSource={RelativeSource AncestorType=DataGrid}}" /> </Style> </DataGridComboBoxColumn.EditingElementStyle> </DataGridComboBoxColumn> </DataGrid.Columns> 是一个字符串。您需要将其存储在"Esquina"(而不是char*中 - 大多数现代编译器应该对此错误发出错误):

char

然后,您可以使用char* casa = "Esquina"; 格式化程序(而非%s)将其打印出来:

%c

答案 1 :(得分:2)

首先,一些基础知识:

在C中,字符串是一系列字符值,后跟一个0值终结符。字符串存储在char数组中,而不是单个char个对象中。

字符串文字由双引号(")分隔,而字符常量由单引号(')分隔。

在您的代码中

char casa = 'Esquina';

您将casa声明为char,这意味着它只能存储单个字符值,而不能存储字符串。您使用'Esquina'初始化它,它不是字符串文字,而是多字节字符常量。多字节字符常量以实现定义的方式映射到char个对象。在这种特殊情况下,它不是你想要的。

casa应声明为

const char *casa = "Esquina";

char casa[] = "Esquina";

取决于您以后是否需要修改字符串的内容。第一个版本将casa声明为指向字符串文字 "Esquina" 1 中第一个字符的指针。第二个版本将casa声明为char 2 的8个元素数组,并将字符串文字的内容复制到它,为我们提供

casa[0] == 'E'
casa[1] == 's'
casa[2] == 'q'
casa[3] == 'u'
casa[4] == 'i'
casa[5] == 'n'
casa[6] == 'a'
casa[7] == 0

要打印出来,您可以使用%s中的printf转换说明符:

printf("Letra %c, numero %d, em uma %s\n", letra, numero, casa);

<小时/>

  1. 字符串文字存储为char的数组,以便在程序启动时分配数组,并在程序终止时释放。尝试修改字符串文字的内容会调用未定义的行为 - 它可能会起作用,它可能会导致段错误,它可能会发生意外情况。为了防止我们通过casa意外修改字符串文字,我们将其声明为const char *;这样,任何改变字符串的尝试都会导致编译器牦牛
  2. 大小取自字符串的长度,另外还有一个用于存储字符串终止符的元素。