【问题标题】:passing arg 1 of `puts' makes pointer from integer without a cast传递 `puts' 的 arg 1 使指针从整数而不进行强制转换
【发布时间】:2013-09-15 19:30:04
【问题描述】:
struct{
char nome[30],rua [50],bairro [20],cidade [30],se [3] ;
int na, exc, numero;
long int CEP;
}typedef endereco;

main(){
       endereco agenda[20];
       int i, j, opc, opc1=0, opc2, eopc ;
       char pnome[30], pbairro[20], pcidade[30], enome[30];

while (opc!=4){
       system("cls");
       printf("Agenda facs, digite a opção: \n|\t1-incluir\t|\n|\t2-Consultar\t|\n|\t3-excluir\t|\n|\t4-sair\t |\nDigite a opção ");
       scanf("%d",&opc);
       fflush(stdin);
       switch (opc){
                    case 1:
                         system("cls");
                         printf("Digite os Dados a seguir para incluir no # %d :\n",opc1+1);
                         agenda[opc1].na=opc1+1;
                         agenda[opc1].exc=0;
                         printf("Digite o nome: ");
                         gets(agenda[opc1].nome);
                         printf("Digite a Rua: ");
                         gets(agenda[opc1].rua);                         
                         printf("Digite o Bairro: ");
                         gets(agenda[opc1].bairro);
                         printf("Digite o numero: ");
                         fflush(stdin);
                         scanf("%d",&agenda[opc1].numero);
                         fflush(stdin);                         
                         printf("Digite a Cidade: ");
                         gets(agenda[opc1].cidade); 
                         printf("Digite a Sigla do Estado: ");
                         gets(agenda[opc1].se);
                         printf("Digite o CEP: ");
                         fflush(stdin);
                         scanf("%d",&agenda[opc1].CEP);
                         fflush(stdin); 
                         opc1++;
                         break;
                    case 2:
                         system("cls");
                         printf("\n|\t1-Nome\t|\n|\t2-Bairro\t|\n|\t3-Cidade\t|\n|\tDigite a opção ");
                         scanf("%d",&opc2);
                         printf("\t|\n");                                       
                         fflush(stdin);                         
                                       switch (opc2){
                                              case 1:
                                                   system("cls");
                                                   printf("Qual o nome a procurar? ");
                                                   gets(pnome);
                                                   for(i=0;i<20;i++){
                                                                     if(strcmp(pnome,agenda[i].nome)==0){
                                                                     printf("\n\tNumero Agenda: ");
                                                                     puts(agenda[i].na);                                                                     printf("\n\tNome: ");
                                                                     printf("\n\tNome: ");                                                                     
                                                                     puts(agenda[i].nome);
                                                                     printf("\n\tRua: ");
                                                                     puts(agenda[i].rua);                         
                                                                     printf("\n\tBairro: ");
                                                                     puts(agenda[i].bairro);
                                                                     printf("\n\tNumero: ");
                                                                     puts(agenda[i].numero);                         
                                                                     printf("\n\tCidade: ");
                                                                     puts(agenda[i].cidade); 
                                                                     printf("\n\tEstado: ");
                                                                     puts(agenda[i].se);
                                                                     printf("\n\tCEP: ");
                                                                     puts(agenda[i].CEP);
                                                                     printf("\n\t______________");}}
                                                   break;                  
                                              case 2:
                                                   system("cls");
                                                   printf("Qual o Bairro a procurar? ");
                                                   gets(pbairro);                                                   
                                                   for(i=0;i<20;i++){
                                                                     if(strcmp(pbairro,agenda[i].bairro)==0){
                                                                     printf("\n\tNumero Agenda: ");
                                                                     puts(agenda[i].na);                                                                     printf("\n\tNome: ");
                                                                     printf("\n\tNome: ");                                                                     
                                                                     puts(agenda[i].nome);
                                                                     printf("\n\tRua: ");
                                                                     puts(agenda[i].rua);                         
                                                                     printf("\n\tBairro: ");
                                                                     puts(agenda[i].bairro);
                                                                     printf("\n\tNumero: ");
                                                                     puts(agenda[i].numero);                         
                                                                     printf("\n\tCidade: ");
                                                                     puts(agenda[i].cidade); 
                                                                     printf("\n\tEstado: ");
                                                                     puts(agenda[i].se);
                                                                     printf("\n\tCEP: ");
                                                                     puts(agenda[i].CEP);
                                                                     printf("\n\t______________");}}
                                                   break;
                                              case 3:
                                                   system("cls");
                                                   printf("Qual a Cidade a procurar? ");
                                                   gets(pcidade);                                                   
                                                   for(i=0;i<20;i++){
                                                                     if(strcmp(pbairro,agenda[i].cidade)==0){
                                                                     printf("\n\tNumero Agenda: ");
                                                                     puts(agenda[i].na);                                                                  
                                                                     printf("\n\tNome: ");                                                                     
                                                                     puts(agenda[i].nome);
                                                                     printf("\n\tRua: ");
                                                                     puts(agenda[i].rua);                         
                                                                     printf("\n\tBairro: ");
                                                                     puts(agenda[i].bairro);
                                                                     printf("\n\tNumero: ");
                                                                     puts(agenda[i].numero);                         
                                                                     printf("\n\tCidade: ");
                                                                     puts(agenda[i].cidade); 
                                                                     printf("\n\tEstado: ");
                                                                     puts(agenda[i].se);
                                                                     printf("\n\tCEP: ");
                                                                     puts(agenda[i].CEP);
                                                                     printf("\n\t______________");}}
                                                   break;}
                    case 3:
                         system("cls");
                         printf("Digite o Numero da Agenda que deseja excluir");
                         gets(enome);
                         for(i=0;i<20;i++){
                                           if(strcmp(enome,agenda[i].nome)==0){
                                           printf("\n\tNumero Agenda: ");
                                           puts(agenda[i].na);                                                                     
                                           printf("\n\tNome: ");                                                                     
                                           puts(agenda[i].nome);
                                           printf("\n\tRua: ");
                                           puts(agenda[i].rua);                         
                                           printf("\n\tBairro: ");
                                           puts(agenda[i].bairro);
                                           printf("\n\tNumero: ");
                                           puts(agenda[i].numero);                         
                                           printf("\n\tCidade: ");
                                           puts(agenda[i].cidade); 
                                           printf("\n\tEstado: ");
                                           puts(agenda[i].se);
                                           printf("\n\tCEP: ");
                                           puts(agenda[i].CEP);
                                           printf("\n\t______________");}}
                         printf("\n\tDigite o Numero Agenda do Nome na qual voce quer excluir: ");
                         fflush(stdin); 
                         scanf("%d",&i);
                         fflush(stdin);
                         if(agenda[i].exc==0){
                                              printf("\n\t%d . %s \n\tDeseja excluir esse contato?\n\t1-Sim\n\t2-Nao\n\tOpcao: ",agenda[i].na,agenda[i].nome);
                                              fflush(stdin);
                                              scanf("%d",&eopc);
                                              fflush(stdin);
                                              switch (eopc){
                                                     case 1:
                                                          agenda[i].exc=1;
                                                          printf("\t\nNumero excluido !");
                                                          break;
                                                     case 2:
                                                          printf("\t\nNumero nao excluido !");
                                                          break;}}}}



  system("PAUSE");  
  return 0;
}

你好:D 该程序已构建或尝试成为可以保存联系人的笔记本。 但是我收到了这个警告,当'puts'进入程序时,它会崩溃。 有人可以帮忙吗?

[警告] 传递 `puts' 的 arg 1 使指针从没有 a 演员表

谢谢。

【问题讨论】:

  • 为什么大家都想fflush(stdin)
  • fflush(stdin) 在 Windows 上定义为从输入缓冲区刷新任何数据。根据标准 C、POSIX 和大多数类 Unix 系统,它是未定义的行为,但它在 Windows 环境中确实具有定义(有用)的含义。
  • 好吧,我认为 fflush(stdin) 会导致内存,当您在 %d 上输入某些内容时,它仍然会保存您的“输入”,而当您执行 get 或 %c 时,它会跳转到输入内存已经有一个“输入”,跳过这个过程。
  • @JonathanLeffler 我不知道它是在 Windows 上定义的,哇!阴谋论就这么多了:(
  • TL;博士。 SSCCEE 是你的朋友。 .

标签: c pointers casting puts


【解决方案1】:
puts(agenda[i].na);

在您的代码中,agenda[i].naint。用puts不能打印,试试printf

printf("%d\n", agenda[i].na);

当“puts”进入程序时,它会崩溃。

你在欺骗puts 使用随机整数作为指针。

【讨论】:

  • 谢谢,它在这里工作。我不知道那不能打印数字,我的错。
  • 这里还有个问题,第一个switch直接传到case 3了,怎么办?
  • @MatheusPereira 您的代码过于复杂且缩进不佳。但是,我相信在case 3 之前缺少break;。尝试重构你的代码,也许把它分解成函数。
  • puts()put string 的缩写,意思是“从字符串中输出数据”。这是助记符。
  • @cnicutar 谢谢,错过了内部开关中开关 1 的第二次休息,错过了。我很抱歉这段代码,我是新手,并试图提高自己,现在才发现这个网站,很可能会在这里了解更多信息。感谢您的遮阳篷。
猜你喜欢
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 2021-08-13
  • 2021-11-01
相关资源
最近更新 更多