循环终止程序过早

时间:2014-03-31 16:14:03

标签: c

此循环导致程序意外终止。 请帮我确定问题。

char n1, n2;
int wt, edges;    

printf("\nEnter the Number of edges in the Network\n");
scanf("%d",&edges);
printf("Enter the details of all the edges of the Network\n"); 
 for(int i=0;i<edges;i++)
 {
    printf("\nedge - %d : ",i+1);

    printf("\n n1 = ");
    scanf("%s", &n1);
    n1 = toupper(n1);
    printf("\n n2 = ");
    scanf("%s", &n2);
    n2 = toupper(n1);
    printf("\n wt = ");
    scanf("%d", &wt);
    int n11 = n1 - 'A' ;
    int n22 = n2 - 'A';
    w[n11][n22]=w[n22][n11]=wt;
 }

示例输入:       n1 = a       n2 = b       wt = 1

toupper()会将输入更改为大写字母。

2 个答案:

答案 0 :(得分:0)

很可能是BLUEPIXY发现的问题。这是错的:

char n1;
scanf("%s", &n1);

一种可能的解决方案:

char n1;
scanf(" %c", &n1);

另一种可能的解决方案,它允许单词之间的任何空格(不仅是单个空格):

char n1;
char tmp[128];
if (scanf("%s", tmp) != 1) abort();
if (strlen(tmp) != 1) abort();
n1 = tmp[0];

答案 1 :(得分:0)

您正在尝试将字符串输入char变量。即使您输入一个字符,下一个内存位置也会被\0覆盖。这可能会访问只读存储器并导致突然终止。

取而代之的是:

scanf(" %c", &n1);